ISEbd-21_Savelyev.P.Y._ProjectSellPC_LabWork1 #1

Closed
aaahsap wants to merge 1 commits from LabWork1 into main
58 changed files with 5686 additions and 52 deletions

View File

@@ -0,0 +1,21 @@
namespace ProjectSellPC.Entites
{
public class Cheque
{
public int Id { get; set; }
public List<ProductInCheque> Products { get; set; }
public Client Client { get; set; }
public DateTime PurchaseDate { get; set; }
public static Cheque CreateEntity(int id, List<ProductInCheque> products, Client client, DateTime purchaseDate)
{
return new Cheque
{
Id = id,
Products = products,
Client = client,
PurchaseDate = purchaseDate
};
}
}
}

View File

@@ -0,0 +1,22 @@
using ProjectSellPC.Entites.Enums;
namespace ProjectSellPC.Entites
{
public class Client
{
public int Id { get; set; }
public string Name { get; set; }
public string PhoneNumber { get; set; }
public ClientType ClientType { get; set; }
public static Client CreateEntity(int id, string name, string phoneNumber, ClientType clientType)
{
return new Client
{
Id = id,
Name = name,
PhoneNumber = phoneNumber,
ClientType = clientType
};
}
}
}

View File

@@ -0,0 +1,9 @@
namespace ProjectSellPC.Entites.Enums
{
public enum ClientType
{
None = 0,
Individual = 1,
Business = 2
}
}

View File

@@ -0,0 +1,17 @@
namespace ProjectSellPC.Entites.Enums
{
[Flags]
public enum ProductType
{
None = 0,
Laptop = 1,
Desktop = 2, // Настольный компьютер
Monitor = 4, // Монитор
Keyboard = 8, // Клавиатура
Mouse = 16, // Мышь
Headset = 32, // Наушники
Webcam = 64, // Веб-камера
Printer = 128, // Принтер
Software = 256 // Программное обеспечение
}
}

View File

@@ -0,0 +1,22 @@
using ProjectSellPC.Entites.Enums;
namespace ProjectSellPC.Entites
{
public class Product
{
public int ID { get; private set; }
public string Name { get; private set; }
public string Description { get; private set; }
public decimal Price { get; private set; }
public ProductType ProductType { get; private set; }
public static Product CreateEntity(int id, string name, string desc, decimal price, ProductType productType)
{
return new Product { ID = id,
Name = name ?? string.Empty,
Description = desc ?? string.Empty,
Price = price,
ProductType = productType };
}
}
}

View File

@@ -0,0 +1,12 @@
namespace ProjectSellPC.Entites
{
public class ProductInCheque
{
public int ID { get; set; }
public int Count { get; set; }
public static ProductInCheque CreateElement(int id, int count)
{
return new ProductInCheque { ID = id, Count = count};
}
}
}

View File

@@ -0,0 +1,15 @@
namespace ProjectSellPC.Entites
{
public class ProductsOnWarehouse
{
public int Id { get; set; }
public Product Product { get; set; }
public Warehouse Warehouse { get; set; }
public int Count { get; set; }
public static ProductsOnWarehouse CreateEntity(int id, Product product, Warehouse Warehouse, int count)
{
return new ProductsOnWarehouse { Warehouse = Warehouse, Id = id, Product = product, Count = count };
}
}
}

View File

@@ -0,0 +1,14 @@
namespace ProjectSellPC.Entites
{
public class Warehouse
{
public int Id { get; set; }
public int Size { get; set; } // Вместимость
public string Adress { get; set; }
public static Warehouse CreateEntity(int id, int size, string adress)
{
return new Warehouse { Id = id, Size = size, Adress = adress };
}
}
}

View File

@@ -1,39 +0,0 @@
namespace ProjectSellPC
{
partial class Form1
{
/// <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.components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Text = "Form1";
}
#endregion
}
}

View File

@@ -1,10 +0,0 @@
namespace ProjectSellPC
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,77 @@
namespace ProjectSellPC.Forms.Receipt
{
partial class ChequeForm
{
/// <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()
{
addButton = new Button();
ChequesDataGridView = new DataGridView();
((System.ComponentModel.ISupportInitialize)ChequesDataGridView).BeginInit();
SuspendLayout();
//
// addButton
//
addButton.BackColor = SystemColors.Control;
addButton.Location = new Point(878, 12);
addButton.Name = "addButton";
addButton.Size = new Size(161, 60);
addButton.TabIndex = 3;
addButton.Text = "Добавить";
addButton.UseVisualStyleBackColor = false;
addButton.Click += addButton_Click;
//
// ChequesDataGridView
//
ChequesDataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left;
ChequesDataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
ChequesDataGridView.Location = new Point(12, 12);
ChequesDataGridView.Name = "ChequesDataGridView";
ChequesDataGridView.RowHeadersWidth = 51;
ChequesDataGridView.Size = new Size(851, 399);
ChequesDataGridView.TabIndex = 2;
//
// ChequeForm
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1056, 450);
Controls.Add(addButton);
Controls.Add(ChequesDataGridView);
Name = "ChequeForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "Чеки";
Load += ChequeForm_Load;
((System.ComponentModel.ISupportInitialize)ChequesDataGridView).EndInit();
ResumeLayout(false);
}
#endregion
private Button addButton;
private DataGridView ChequesDataGridView;
}
}

View File

@@ -0,0 +1,46 @@
using ProjectSellPC.Repos;
using Unity;
namespace ProjectSellPC.Forms.Receipt
{
public partial class ChequeForm : Form
{
private readonly IUnityContainer _container;
private readonly IChequeRepository _ChequeRepository;
public ChequeForm(IUnityContainer unityContainer, IChequeRepository ChequeRepository)
{
InitializeComponent();
_container = unityContainer ?? throw new ArgumentNullException(nameof(unityContainer));
_ChequeRepository = ChequeRepository ?? throw new ArgumentNullException(nameof(ChequeRepository));
}
private void ChequeForm_Load(object sender, EventArgs e)
{
try
{
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => ChequesDataGridView.DataSource = _ChequeRepository.ReadAll();
private void addButton_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<ChequeSettingsForm>().ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<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,134 @@
namespace ProjectSellPC.Forms.Receipt
{
partial class ChequeSettingsForm
{
/// <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()
{
customerComboBox = new ComboBox();
label1 = new Label();
saveButton = new Button();
label4 = new Label();
productsDataGridView = new DataGridView();
ProductColoumn = new DataGridViewComboBoxColumn();
ProductCount = new DataGridViewTextBoxColumn();
((System.ComponentModel.ISupportInitialize)productsDataGridView).BeginInit();
SuspendLayout();
//
// customerComboBox
//
customerComboBox.FormattingEnabled = true;
customerComboBox.Location = new Point(152, 6);
customerComboBox.Name = "customerComboBox";
customerComboBox.Size = new Size(151, 28);
customerComboBox.TabIndex = 18;
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(12, 9);
label1.Name = "label1";
label1.Size = new Size(97, 20);
label1.TabIndex = 17;
label1.Text = "Покупатель: ";
//
// saveButton
//
saveButton.Anchor = AnchorStyles.Bottom;
saveButton.Location = new Point(125, 297);
saveButton.Name = "saveButton";
saveButton.Size = new Size(94, 29);
saveButton.TabIndex = 19;
saveButton.Text = "Сохранить";
saveButton.UseVisualStyleBackColor = true;
saveButton.Click += saveButton_Click;
//
// label4
//
label4.AutoSize = true;
label4.Location = new Point(12, 44);
label4.Name = "label4";
label4.Size = new Size(54, 20);
label4.TabIndex = 15;
label4.Text = "Товар:";
//
// productsDataGridView
//
productsDataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
productsDataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
productsDataGridView.Columns.AddRange(new DataGridViewColumn[] { ProductColoumn, ProductCount });
productsDataGridView.Location = new Point(12, 67);
productsDataGridView.Name = "productsDataGridView";
productsDataGridView.RowHeadersWidth = 51;
productsDataGridView.Size = new Size(336, 224);
productsDataGridView.TabIndex = 20;
//
// ProductColoumn
//
ProductColoumn.HeaderText = "Товары";
ProductColoumn.MinimumWidth = 6;
ProductColoumn.Name = "ProductColoumn";
ProductColoumn.Resizable = DataGridViewTriState.True;
ProductColoumn.SortMode = DataGridViewColumnSortMode.Automatic;
ProductColoumn.Width = 125;
//
// ProductCount
//
ProductCount.HeaderText = "Количество";
ProductCount.MinimumWidth = 6;
ProductCount.Name = "ProductCount";
ProductCount.Width = 125;
//
// ChequeSettingsForm
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(360, 338);
Controls.Add(productsDataGridView);
Controls.Add(saveButton);
Controls.Add(customerComboBox);
Controls.Add(label1);
Controls.Add(label4);
Name = "ChequeSettingsForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "Новый чек";
Load += ChequeSettingsForm_Load;
((System.ComponentModel.ISupportInitialize)productsDataGridView).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private ComboBox customerComboBox;
private Label label1;
private Button saveButton;
private Label label4;
private DataGridView productsDataGridView;
private DataGridViewComboBoxColumn ProductColoumn;
private DataGridViewTextBoxColumn ProductCount;
}
}

View File

@@ -0,0 +1,74 @@
using ProjectSellPC.Entites;
using ProjectSellPC.Repos;
namespace ProjectSellPC.Forms.Receipt
{
public partial class ChequeSettingsForm : Form
{
private readonly IChequeRepository _ChequeRepository;
private readonly IProductRepository _productRepository;
private readonly IClientRepository _customerRepository;
public ChequeSettingsForm(IChequeRepository ChequeRepository, IProductRepository productRepository, IClientRepository customerRepository)
{
InitializeComponent();
_ChequeRepository = ChequeRepository ?? throw new ArgumentNullException(nameof(ChequeRepository));
_productRepository = productRepository ?? throw new ArgumentNullException(nameof(productRepository));
_customerRepository = customerRepository ?? throw new ArgumentNullException(nameof(customerRepository));
ProductColoumn.DataSource = _productRepository.ReadAll().ToList();
ProductColoumn.DisplayMember = "Name";
ProductColoumn.ValueMember = "Id";
customerComboBox.DataSource = _customerRepository.ReadAll().ToList();
customerComboBox.DisplayMember = "Name";
customerComboBox.ValueMember = "Id";
}
public void ChequeSettingsForm_Load(object sender, EventArgs e)
{
}
private void saveButton_Click(object sender, EventArgs e)
{
try
{
if (productsDataGridView.RowCount < 1 || customerComboBox.SelectedItem == null)
{
throw new Exception("Необходимо выбрать товар и клиента");
}
var products = CreateListProducts();
var customer = (Client)customerComboBox.SelectedItem;
var cheque = Cheque.CreateEntity(0, products, customer, DateTime.Now);
_ChequeRepository.Create(cheque);
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при создании чека", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private List<ProductInCheque> CreateListProducts()
{
var list = new List<ProductInCheque>();
foreach (DataGridViewRow row in productsDataGridView.Rows)
{
if (row.Cells["ProductColoumn"].Value == null || row.Cells["ColumnCount"].Value == null)
{
continue;
}
list.Add(ProductInCheque.CreateElement(Convert.ToInt32(row.Cells["ProductColoumn"].Value), Convert.ToInt32(row.Cells["ProductCount"].Value)));
}
return list;
}
}
}

View File

@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<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="ProductColoumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ProductCount.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@@ -0,0 +1,103 @@
namespace ProjectSellPC.Forms
{
partial class ClientForm
{
/// <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()
{
deleteButton = new Button();
editButton = new Button();
addButton = new Button();
productsDataGridView = new DataGridView();
((System.ComponentModel.ISupportInitialize)productsDataGridView).BeginInit();
SuspendLayout();
//
// deleteButton
//
deleteButton.Location = new Point(869, 144);
deleteButton.Name = "deleteButton";
deleteButton.Size = new Size(161, 60);
deleteButton.TabIndex = 7;
deleteButton.Text = "Удалить";
deleteButton.UseVisualStyleBackColor = true;
deleteButton.Click += deleteButton_Click;
//
// editButton
//
editButton.Location = new Point(869, 78);
editButton.Name = "editButton";
editButton.Size = new Size(161, 60);
editButton.TabIndex = 6;
editButton.Text = "Редактировать";
editButton.UseVisualStyleBackColor = true;
editButton.Click += editButton_Click;
//
// addButton
//
addButton.BackColor = SystemColors.Control;
addButton.Location = new Point(869, 12);
addButton.Name = "addButton";
addButton.Size = new Size(161, 60);
addButton.TabIndex = 5;
addButton.Text = "Добавить";
addButton.UseVisualStyleBackColor = false;
addButton.Click += addButton_Click;
//
// productsDataGridView
//
productsDataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left;
productsDataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
productsDataGridView.Location = new Point(12, 12);
productsDataGridView.Name = "productsDataGridView";
productsDataGridView.RowHeadersWidth = 51;
productsDataGridView.Size = new Size(851, 400);
productsDataGridView.TabIndex = 4;
//
// ClientForm
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1056, 424);
Controls.Add(deleteButton);
Controls.Add(editButton);
Controls.Add(addButton);
Controls.Add(productsDataGridView);
Name = "ClientForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "Клиенты";
Load += ClientForm_Load;
((System.ComponentModel.ISupportInitialize)productsDataGridView).EndInit();
ResumeLayout(false);
}
#endregion
private Button deleteButton;
private Button editButton;
private Button addButton;
private DataGridView productsDataGridView;
}
}

View File

@@ -0,0 +1,102 @@
using ProjectSellPC.Forms.Clients;
using ProjectSellPC.Repos;
using Unity;
namespace ProjectSellPC.Forms
{
public partial class ClientForm : Form
{
private readonly IUnityContainer _container;
private readonly IClientRepository _repository;
public ClientForm(IUnityContainer unityContainer, IClientRepository clientRepository)
{
InitializeComponent();
_container = unityContainer ?? throw new ArgumentNullException(nameof(unityContainer));
_repository = clientRepository ?? throw new ArgumentNullException(nameof(_repository));
}
private void ClientForm_Load(object sender, EventArgs e)
{
try
{
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => productsDataGridView.DataSource = _repository.ReadAll();
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;
if (productsDataGridView.SelectedRows.Count < 1)
{
MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
id = Convert.ToInt32(productsDataGridView.SelectedRows[0].Cells["Id"].Value);
return true;
}
private void addButton_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<ClientFormSettings>().ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void editButton_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
try
{
var form = _container.Resolve<ClientFormSettings>();
form.Id = findId;
form.ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void deleteButton_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes)
{
return;
}
try
{
_repository.Delete(findId);
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<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,133 @@
namespace ProjectSellPC.Forms.Clients
{
partial class ClientFormSettings
{
/// <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()
{
label2 = new Label();
label1 = new Label();
nameTextbox = new TextBox();
saveButton = new Button();
phoneNumberTextbox = new TextBox();
typeCombobox = new ComboBox();
label4 = new Label();
SuspendLayout();
//
// label2
//
label2.AutoSize = true;
label2.Location = new Point(13, 59);
label2.Name = "label2";
label2.Size = new Size(130, 20);
label2.TabIndex = 13;
label2.Text = "Номер телефона:";
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(13, 12);
label1.Name = "label1";
label1.Size = new Size(122, 20);
label1.TabIndex = 11;
label1.Text = "Имя покупателя";
//
// nameTextbox
//
nameTextbox.Location = new Point(153, 12);
nameTextbox.Name = "nameTextbox";
nameTextbox.Size = new Size(210, 27);
nameTextbox.TabIndex = 10;
//
// saveButton
//
saveButton.Anchor = AnchorStyles.Bottom;
saveButton.Location = new Point(153, 229);
saveButton.Name = "saveButton";
saveButton.Size = new Size(94, 29);
saveButton.TabIndex = 9;
saveButton.Text = "Сохранить";
saveButton.UseVisualStyleBackColor = true;
saveButton.Click += saveButton_Click;
//
// phoneNumberTextbox
//
phoneNumberTextbox.Location = new Point(153, 59);
phoneNumberTextbox.Name = "phoneNumberTextbox";
phoneNumberTextbox.Size = new Size(210, 27);
phoneNumberTextbox.TabIndex = 18;
//
// typeCombobox
//
typeCombobox.FormattingEnabled = true;
typeCombobox.Location = new Point(153, 101);
typeCombobox.Name = "typeCombobox";
typeCombobox.Size = new Size(151, 28);
typeCombobox.TabIndex = 20;
//
// label4
//
label4.AutoSize = true;
label4.Location = new Point(13, 104);
label4.Name = "label4";
label4.Size = new Size(38, 20);
label4.TabIndex = 19;
label4.Text = "Вид:";
//
// ClientFormSettings
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(388, 270);
Controls.Add(typeCombobox);
Controls.Add(label4);
Controls.Add(phoneNumberTextbox);
Controls.Add(label2);
Controls.Add(label1);
Controls.Add(nameTextbox);
Controls.Add(saveButton);
Name = "ClientFormSettings";
StartPosition = FormStartPosition.CenterScreen;
Text = "Регистрация клиента";
Load += ClientFormSettings_Load;
ResumeLayout(false);
PerformLayout();
}
#endregion
private ComboBox typeCombobox;
private Label label4;
private Label label3;
private NumericUpDown priceNumeric;
private Label label2;
private TextBox descriptionTextbox;
private Label label1;
private TextBox nameTextbox;
private Button saveButton;
private TextBox phoneNumberTextbox;
}
}

View File

@@ -0,0 +1,87 @@
using ProjectSellPC.Entites.Enums;
using ProjectSellPC.Entites;
using ProjectSellPC.Repos;
namespace ProjectSellPC.Forms.Clients
{
public partial class ClientFormSettings : Form
{
private readonly IClientRepository _repository;
private int? _clientId;
public int Id
{
set
{
try
{
var client = _repository.Read(value);
if (client != null)
{
throw new InvalidDataException(nameof(client));
}
nameTextbox.Text = client.Name;
phoneNumberTextbox.Text = client.PhoneNumber;
typeCombobox.SelectedItem = client.ClientType;
_clientId = value;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
public ClientFormSettings(IClientRepository clientRepository)
{
InitializeComponent();
_repository = clientRepository ?? throw new ArgumentNullException(nameof(clientRepository));
typeCombobox.DataSource = Enum.GetValues(typeof(ClientType));
}
private void ClientFormSettings_Load(object sender, EventArgs e)
Review

Пустых методов быть не должно

Пустых методов быть не должно
{
}
private void saveButton_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrWhiteSpace(nameTextbox.Text) ||
string.IsNullOrWhiteSpace(phoneNumberTextbox.Text) || typeCombobox.SelectedIndex < 1
|| typeCombobox.SelectedIndex < 1)
{
throw new Exception("Имеются незаполненные поля");
}
if (_clientId.HasValue)
{
_repository.Update(CreateClient(_clientId.Value));
}
else
{
_repository.Update(CreateClient(0));
}
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private Client CreateClient(int id)
{
return Client.CreateEntity(id, nameTextbox.Text, phoneNumberTextbox.Text, (ClientType)typeCombobox.SelectedValue);
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<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,132 @@
namespace ProjectSellPC
{
partial class ShopForm
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ShopForm));
menuStrip1 = new MenuStrip();
справочникиToolStripMenuItem = new ToolStripMenuItem();
товарыToolStripMenuItem = new ToolStripMenuItem();
клиентыToolStripMenuItem = new ToolStripMenuItem();
складыToolStripMenuItem = new ToolStripMenuItem();
операцииToolStripMenuItem = new ToolStripMenuItem();
товарыНаСкаледToolStripMenuItem = new ToolStripMenuItem();
чекиToolStripMenuItem = new ToolStripMenuItem();
menuStrip1.SuspendLayout();
SuspendLayout();
//
// menuStrip1
//
menuStrip1.ImageScalingSize = new Size(20, 20);
menuStrip1.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, операцииToolStripMenuItem });
menuStrip1.Location = new Point(0, 0);
menuStrip1.Name = "menuStrip1";
menuStrip1.Size = new Size(800, 28);
menuStrip1.TabIndex = 0;
menuStrip1.Text = "menuStrip1";
//
// справочникиToolStripMenuItem
//
справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { товарыToolStripMenuItem, клиентыToolStripMenuItem, складыToolStripMenuItem });
справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem";
справочникиToolStripMenuItem.Size = new Size(126, 24);
справочникиToolStripMenuItem.Text = "Справочники...";
//
// товарыToolStripMenuItem
//
товарыToolStripMenuItem.Name = оварыToolStripMenuItem";
товарыToolStripMenuItem.Size = new Size(152, 26);
товарыToolStripMenuItem.Text = "Товары";
товарыToolStripMenuItem.Click += товарыToolStripMenuItem_Click;
//
// клиентыToolStripMenuItem
//
клиентыToolStripMenuItem.Name = "клиентыToolStripMenuItem";
клиентыToolStripMenuItem.Size = new Size(152, 26);
клиентыToolStripMenuItem.Text = "Клиенты";
клиентыToolStripMenuItem.Click += клиентыToolStripMenuItem_Click;
//
// складыToolStripMenuItem
//
складыToolStripMenuItem.Name = "складыToolStripMenuItem";
складыToolStripMenuItem.Size = new Size(152, 26);
складыToolStripMenuItem.Text = "Склады";
складыToolStripMenuItem.Click += складыToolStripMenuItem_Click;
//
// операцииToolStripMenuItem
//
операцииToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { товарыНаСкаледToolStripMenuItem, чекиToolStripMenuItem });
операцииToolStripMenuItem.Name = "операцииToolStripMenuItem";
операцииToolStripMenuItem.Size = new Size(104, 24);
операцииToolStripMenuItem.Text = "Операции...";
//
// товарыНаСкаледToolStripMenuItem
//
товарыНаСкаледToolStripMenuItem.Name = оварыНаСкаледToolStripMenuItem";
товарыНаСкаледToolStripMenuItem.Size = new Size(216, 26);
товарыНаСкаледToolStripMenuItem.Text = "Товары на складе";
товарыНаСкаледToolStripMenuItem.Click += товарыНаСкаледToolStripMenuItem_Click;
//
// чекиToolStripMenuItem
//
чекиToolStripMenuItem.Name = екиToolStripMenuItem";
чекиToolStripMenuItem.Size = new Size(216, 26);
чекиToolStripMenuItem.Text = "Чеки...";
чекиToolStripMenuItem.Click += чекиToolStripMenuItem_Click;
//
// ShopForm
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
BackgroundImage = (Image)resources.GetObject("$this.BackgroundImage");
BackgroundImageLayout = ImageLayout.Stretch;
ClientSize = new Size(800, 450);
Controls.Add(menuStrip1);
MainMenuStrip = menuStrip1;
Name = "ShopForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "Магазин компьютерной техники";
Load += ShopForm_Load;
menuStrip1.ResumeLayout(false);
menuStrip1.PerformLayout();
ResumeLayout(false);
PerformLayout();
}
#endregion
private MenuStrip menuStrip1;
private ToolStripMenuItem справочникиToolStripMenuItem;
private ToolStripMenuItem товарыToolStripMenuItem;
private ToolStripMenuItem клиентыToolStripMenuItem;
private ToolStripMenuItem складыToolStripMenuItem;
private ToolStripMenuItem операцииToolStripMenuItem;
private ToolStripMenuItem товарыНаСкаледToolStripMenuItem;
private ToolStripMenuItem чекиToolStripMenuItem;
}
}

View File

@@ -0,0 +1,53 @@
using ProjectSellPC.Forms;
using ProjectSellPC.Forms.ProductsOnWarehouse;
Review

Имя файла не соответствует имени элемента проекта

Имя файла не соответствует имени элемента проекта
using ProjectSellPC.Forms.Receipt;
using ProjectSellPC.Forms.Warehouse;
using Unity;
namespace ProjectSellPC
{
public partial class ShopForm : Form
{
private readonly IUnityContainer _container;
public ShopForm(IUnityContainer container)
{
InitializeComponent();
_container = container ?? throw new ArgumentNullException(nameof(container));
}
private void <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ToolStripMenuItem_Click(object sender, EventArgs e)
{
_container.Resolve<ProductForm>().ShowDialog();
}
private void <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ToolStripMenuItem_Click(object sender, EventArgs e)
{
_container.Resolve<ClientForm>().ShowDialog();
}
private void <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ToolStripMenuItem_Click(object sender, EventArgs e)
{
_container.Resolve<WarehouseForm>().ShowDialog();
}
private void <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ToolStripMenuItem_Click(object sender, EventArgs e)
{
_container.Resolve<ProductsOnWarehouseForm>().ShowDialog();
}
private void <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ToolStripMenuItem_Click(object sender, EventArgs e)
{
_container.Resolve<ChequeForm>().ShowDialog();
}
private void ShopForm_Load(object sender, EventArgs e)
{
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,103 @@
namespace ProjectSellPC
{
partial class ProductForm
{
/// <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()
{
productsDataGridView = new DataGridView();
addButton = new Button();
editButton = new Button();
deleteButton = new Button();
((System.ComponentModel.ISupportInitialize)productsDataGridView).BeginInit();
SuspendLayout();
//
// productsDataGridView
//
productsDataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left;
productsDataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
productsDataGridView.Location = new Point(12, 12);
productsDataGridView.Name = "productsDataGridView";
productsDataGridView.RowHeadersWidth = 51;
productsDataGridView.Size = new Size(851, 399);
productsDataGridView.TabIndex = 0;
//
// addButton
//
addButton.BackColor = SystemColors.Control;
addButton.Location = new Point(878, 12);
addButton.Name = "addButton";
addButton.Size = new Size(161, 60);
addButton.TabIndex = 1;
addButton.Text = "Добавить";
addButton.UseVisualStyleBackColor = false;
addButton.Click += addButton_Click;
//
// editButton
//
editButton.Location = new Point(878, 87);
editButton.Name = "editButton";
editButton.Size = new Size(161, 60);
editButton.TabIndex = 2;
editButton.Text = "Редактировать";
editButton.UseVisualStyleBackColor = true;
editButton.Click += editButton_Click;
//
// deleteButton
//
deleteButton.Location = new Point(878, 163);
deleteButton.Name = "deleteButton";
deleteButton.Size = new Size(161, 60);
deleteButton.TabIndex = 3;
deleteButton.Text = "Удалить";
deleteButton.UseVisualStyleBackColor = true;
deleteButton.Click += deleteButton_Click;
//
// ProductForm
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1051, 423);
Controls.Add(deleteButton);
Controls.Add(editButton);
Controls.Add(addButton);
Controls.Add(productsDataGridView);
Name = "ProductForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "Товары";
Load += ProductForm_Load;
((System.ComponentModel.ISupportInitialize)productsDataGridView).EndInit();
ResumeLayout(false);
}
#endregion
private DataGridView productsDataGridView;
private Button addButton;
private Button editButton;
private Button deleteButton;
}
}

View File

@@ -0,0 +1,101 @@
using ProjectSellPC.Repos;
using Unity;
namespace ProjectSellPC
{
public partial class ProductForm : Form
{
private readonly IUnityContainer _container;
private readonly IProductRepository _productRepository;
public ProductForm(IUnityContainer unityContainer, IProductRepository productRepository)
{
InitializeComponent();
_container = unityContainer ?? throw new ArgumentNullException(nameof(unityContainer));
_productRepository = productRepository ?? throw new ArgumentNullException(nameof(_productRepository));
}
private void ProductForm_Load(object sender, EventArgs e)
{
try
{
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => productsDataGridView.DataSource = _productRepository.ReadAll();
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;
if (productsDataGridView.SelectedRows.Count < 1)
{
MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
id = Convert.ToInt32(productsDataGridView.SelectedRows[0].Cells["Id"].Value);
return true;
}
private void addButton_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<ProductSettingsForm>().ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void editButton_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
try
{
var form = _container.Resolve<ProductSettingsForm>();
form.Id = findId;
form.ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void deleteButton_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes)
{
return;
}
try
{
_productRepository.Delete(findId);
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<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,157 @@
namespace ProjectSellPC
{
partial class ProductSettingsForm
{
/// <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()
{
saveButton = new Button();
productNameTextbox = new TextBox();
label1 = new Label();
label2 = new Label();
descriptionTextbox = new TextBox();
priceNumeric = new NumericUpDown();
label3 = new Label();
label4 = new Label();
typeCheckedListBox = new CheckedListBox();
((System.ComponentModel.ISupportInitialize)priceNumeric).BeginInit();
SuspendLayout();
//
// saveButton
//
saveButton.Anchor = AnchorStyles.Bottom;
saveButton.Location = new Point(157, 436);
saveButton.Name = "saveButton";
saveButton.Size = new Size(94, 29);
saveButton.TabIndex = 0;
saveButton.Text = "Сохранить";
saveButton.UseVisualStyleBackColor = true;
saveButton.Click += saveButton_Click;
//
// productNameTextbox
//
productNameTextbox.Location = new Point(152, 36);
productNameTextbox.Name = "productNameTextbox";
productNameTextbox.Size = new Size(210, 27);
productNameTextbox.TabIndex = 1;
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(12, 36);
label1.Name = "label1";
label1.Size = new Size(94, 20);
label1.TabIndex = 2;
label1.Text = "Имя товара:";
//
// label2
//
label2.AutoSize = true;
label2.Location = new Point(12, 83);
label2.Name = "label2";
label2.Size = new Size(134, 20);
label2.TabIndex = 4;
label2.Text = "Описание товара:";
//
// descriptionTextbox
//
descriptionTextbox.Location = new Point(152, 83);
descriptionTextbox.Multiline = true;
descriptionTextbox.Name = "descriptionTextbox";
descriptionTextbox.Size = new Size(210, 132);
descriptionTextbox.TabIndex = 3;
//
// priceNumeric
//
priceNumeric.DecimalPlaces = 2;
priceNumeric.Location = new Point(152, 233);
priceNumeric.Name = "priceNumeric";
priceNumeric.Size = new Size(99, 27);
priceNumeric.TabIndex = 5;
priceNumeric.ThousandsSeparator = true;
//
// label3
//
label3.AutoSize = true;
label3.Location = new Point(12, 235);
label3.Name = "label3";
label3.Size = new Size(48, 20);
label3.TabIndex = 6;
label3.Text = "Цена:";
//
// label4
//
label4.AutoSize = true;
label4.Location = new Point(12, 285);
label4.Name = "label4";
label4.Size = new Size(38, 20);
label4.TabIndex = 7;
label4.Text = "Вид:";
//
// typeCheckedListBox
//
typeCheckedListBox.FormattingEnabled = true;
typeCheckedListBox.Location = new Point(152, 285);
typeCheckedListBox.Name = "typeCheckedListBox";
typeCheckedListBox.Size = new Size(150, 114);
typeCheckedListBox.TabIndex = 8;
//
// ProductSettingsForm
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(409, 477);
Controls.Add(typeCheckedListBox);
Controls.Add(label4);
Controls.Add(label3);
Controls.Add(priceNumeric);
Controls.Add(label2);
Controls.Add(descriptionTextbox);
Controls.Add(label1);
Controls.Add(productNameTextbox);
Controls.Add(saveButton);
Name = "ProductSettingsForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "Настройка товара...";
Load += ProductSettingsForm_Load;
((System.ComponentModel.ISupportInitialize)priceNumeric).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private Button saveButton;
private TextBox productNameTextbox;
private Label label1;
private Label label2;
private TextBox descriptionTextbox;
private NumericUpDown priceNumeric;
private Label label3;
private Label label4;
private CheckedListBox typeCheckedListBox;
}
}

View File

@@ -0,0 +1,104 @@
using ProjectSellPC.Entites;
using ProjectSellPC.Entites.Enums;
using ProjectSellPC.Repos;
namespace ProjectSellPC
{
public partial class ProductSettingsForm : Form
{
private readonly IProductRepository _productRepository;
private int? _productId;
public int Id
{
set
{
try
{
var product = _productRepository.Read(value);
if (product != null)
{
throw new InvalidDataException(nameof(product));
}
productNameTextbox.Text = product.Name;
descriptionTextbox.Text = product.Description;
foreach (ProductType elem in Enum.GetValues(typeof(ProductType)))
{
if ((elem & product.ProductType) != 0)
{
typeCheckedListBox.SetItemChecked(typeCheckedListBox.Items.IndexOf(elem), true);
}
}
priceNumeric.Value = product.Price;
_productId = value;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
public ProductSettingsForm(IProductRepository productRepository)
{
InitializeComponent();
_productRepository = productRepository ?? throw new ArgumentNullException(nameof(productRepository));
foreach (var elem in Enum.GetValues(typeof(ProductType)))
{
typeCheckedListBox.Items.Add(elem);
}
}
private void ProductSettingsForm_Load(object sender, EventArgs e)
{
}
private void saveButton_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrWhiteSpace(productNameTextbox.Text) ||
string.IsNullOrWhiteSpace(descriptionTextbox.Text) || typeCheckedListBox.CheckedItems.Count == 0)
{
throw new Exception("Имеются незаполненные поля");
}
if (_productId.HasValue)
{
_productRepository.Update(CreateProduct(_productId.Value));
}
else
{
_productRepository.Create(CreateProduct(0));
}
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private Product CreateProduct(int id)
{
ProductType type = ProductType.None;
foreach (var elem in typeCheckedListBox.CheckedItems)
{
type |= (ProductType)elem;
}
return Product.CreateEntity(id, productNameTextbox.Text, descriptionTextbox.Text, priceNumeric.Value, type);
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<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,90 @@
namespace ProjectSellPC.Forms.ProductsOnWarehouse
{
partial class ProductsOnWarehouseForm
{
/// <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()
{
addButton = new Button();
productsDataGridView = new DataGridView();
editButton = new Button();
((System.ComponentModel.ISupportInitialize)productsDataGridView).BeginInit();
SuspendLayout();
//
// addButton
//
addButton.BackColor = SystemColors.Control;
addButton.Location = new Point(881, 12);
addButton.Name = "addButton";
addButton.Size = new Size(161, 60);
addButton.TabIndex = 9;
addButton.Text = "Добавить";
addButton.UseVisualStyleBackColor = false;
addButton.Click += addButton_Click;
//
// productsDataGridView
//
productsDataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left;
productsDataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
productsDataGridView.Location = new Point(12, 12);
productsDataGridView.Name = "productsDataGridView";
productsDataGridView.RowHeadersWidth = 51;
productsDataGridView.Size = new Size(851, 400);
productsDataGridView.TabIndex = 8;
//
// editButton
//
editButton.Location = new Point(881, 78);
editButton.Name = "editButton";
editButton.Size = new Size(161, 60);
editButton.TabIndex = 10;
editButton.Text = "Редактировать";
editButton.UseVisualStyleBackColor = true;
editButton.Click += editButton_Click;
//
// ProductsOnWarehouseForm
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1064, 450);
Controls.Add(editButton);
Controls.Add(addButton);
Controls.Add(productsDataGridView);
Name = "ProductsOnWarehouseForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "Товары на складе";
Load += ProductsOnWarehouse_Load;
((System.ComponentModel.ISupportInitialize)productsDataGridView).EndInit();
ResumeLayout(false);
}
#endregion
private Button addButton;
private DataGridView productsDataGridView;
private Button editButton;
}
}

View File

@@ -0,0 +1,80 @@
using ProjectSellPC.Repos;
using Unity;
namespace ProjectSellPC.Forms.ProductsOnWarehouse
{
public partial class ProductsOnWarehouseForm : Form
{
private readonly IUnityContainer _container;
private readonly IProductOnWarehouseRepository _productOnWarehouseRepository;
public ProductsOnWarehouseForm(IUnityContainer unityContainer, IProductOnWarehouseRepository productOnWarehouseRepository)
{
InitializeComponent();
_container = unityContainer ?? throw new ArgumentNullException(nameof(unityContainer));
_productOnWarehouseRepository = productOnWarehouseRepository ?? throw new ArgumentNullException(nameof(productOnWarehouseRepository));
}
private void ProductsOnWarehouse_Load(object sender, EventArgs e)
{
try
{
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => productsDataGridView.DataSource = _productOnWarehouseRepository.ReadAll();
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;
if (productsDataGridView.SelectedRows.Count < 1)
{
MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
id = Convert.ToInt32(productsDataGridView.SelectedRows[0].Cells["Id"].Value);
return true;
}
private void addButton_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<ProductsOnWarehouseSettingsForm>().ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void editButton_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
try
{
var form = _container.Resolve<ProductsOnWarehouseSettingsForm>();
form.Id = findId;
form.ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<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,134 @@
namespace ProjectSellPC.Forms.ProductsOnWarehouse
{
partial class ProductsOnWarehouseSettingsForm
{
/// <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()
{
productCombobox = new ComboBox();
label4 = new Label();
label3 = new Label();
countNumeric = new NumericUpDown();
WarehouseCombobox = new ComboBox();
label1 = new Label();
saveButton = new Button();
((System.ComponentModel.ISupportInitialize)countNumeric).BeginInit();
SuspendLayout();
//
// productCombobox
//
productCombobox.FormattingEnabled = true;
productCombobox.Location = new Point(155, 12);
productCombobox.Name = "productCombobox";
productCombobox.Size = new Size(151, 28);
productCombobox.TabIndex = 12;
//
// label4
//
label4.AutoSize = true;
label4.Location = new Point(15, 15);
label4.Name = "label4";
label4.Size = new Size(54, 20);
label4.TabIndex = 11;
label4.Text = "Товар:";
//
// label3
//
label3.AutoSize = true;
label3.Location = new Point(15, 82);
label3.Name = "label3";
label3.Size = new Size(103, 20);
label3.TabIndex = 10;
label3.Text = "В количестве:";
//
// countNumeric
//
countNumeric.Location = new Point(155, 80);
countNumeric.Name = "countNumeric";
countNumeric.Size = new Size(99, 27);
countNumeric.TabIndex = 9;
countNumeric.ThousandsSeparator = true;
//
// WarehouseCombobox
//
WarehouseCombobox.FormattingEnabled = true;
WarehouseCombobox.Location = new Point(155, 46);
WarehouseCombobox.Name = "WarehouseCombobox";
WarehouseCombobox.Size = new Size(151, 28);
WarehouseCombobox.TabIndex = 14;
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(15, 49);
label1.Name = "label1";
label1.Size = new Size(81, 20);
label1.TabIndex = 13;
label1.Text = "На складе:";
//
// saveButton
//
saveButton.Anchor = AnchorStyles.Bottom;
saveButton.Location = new Point(155, 175);
saveButton.Name = "saveButton";
saveButton.Size = new Size(94, 29);
saveButton.TabIndex = 15;
saveButton.Text = "Сохранить";
saveButton.UseVisualStyleBackColor = true;
saveButton.Click += saveButton_Click;
//
// ProductsOnWarehouseSettingsForm
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(411, 216);
Controls.Add(saveButton);
Controls.Add(WarehouseCombobox);
Controls.Add(label1);
Controls.Add(productCombobox);
Controls.Add(label4);
Controls.Add(label3);
Controls.Add(countNumeric);
Name = "ProductsOnWarehouseSettingsForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "Продукт на складе...";
Load += ProductsOnWarehouseSettingsForm_Load;
((System.ComponentModel.ISupportInitialize)countNumeric).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private ComboBox productCombobox;
private Label label4;
private Label label3;
private NumericUpDown countNumeric;
private ComboBox WarehouseCombobox;
private Label label1;
private Button saveButton;
}
}

View File

@@ -0,0 +1,101 @@
using ProjectSellPC.Entites;
using ProjectSellPC.Repos;
namespace ProjectSellPC.Forms.ProductsOnWarehouse
{
public partial class ProductsOnWarehouseSettingsForm : Form
{
private readonly IProductOnWarehouseRepository _productOnWarehouseRepository;
private readonly IProductRepository _productRepository;
private readonly IWarehouseRepository _WarehouseRepository;
private int? _recordId;
public int Id
{
set
{
try
{
var record = _productOnWarehouseRepository.Read(value);
if (record == null)
{
throw new InvalidDataException("Record not found");
}
productCombobox.SelectedItem = record.Product;
WarehouseCombobox.SelectedItem = record.Warehouse;
countNumeric.Value = record.Count;
_recordId = value;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
public ProductsOnWarehouseSettingsForm(
IProductOnWarehouseRepository productOnWarehouseRepository,
IProductRepository productRepository,
IWarehouseRepository WarehouseRepository)
{
InitializeComponent();
_productOnWarehouseRepository = productOnWarehouseRepository ?? throw new ArgumentNullException(nameof(productOnWarehouseRepository));
_productRepository = productRepository ?? throw new ArgumentNullException(nameof(productRepository));
_WarehouseRepository = WarehouseRepository ?? throw new ArgumentNullException(nameof(WarehouseRepository));
LoadComboboxes();
}
private void ProductsOnWarehouseSettingsForm_Load(object sender, EventArgs e)
{
}
private void LoadComboboxes()
{
productCombobox.DataSource = _productRepository.ReadAll().ToList();
productCombobox.DisplayMember = "Name";
productCombobox.ValueMember = "Id";
WarehouseCombobox.DataSource = _WarehouseRepository.ReadAll().ToList();
WarehouseCombobox.DisplayMember = "Name";
WarehouseCombobox.ValueMember = "Id";
}
private void saveButton_Click(object sender, EventArgs e)
{
try
{
if (productCombobox.SelectedItem == null || WarehouseCombobox.SelectedItem == null || countNumeric.Value < 1)
{
throw new Exception("Заполните все поля");
}
var selectedProduct = (Product)productCombobox.SelectedItem;
var selectedWarehouse = (Entites.Warehouse)WarehouseCombobox.SelectedItem;
var count = (int)countNumeric.Value;
if (_recordId.HasValue)
{
_productOnWarehouseRepository.Update(CreateProductOnWarehouse(_recordId.Value, selectedProduct, selectedWarehouse, count));
}
else
{
_productOnWarehouseRepository.Create(CreateProductOnWarehouse(0, selectedProduct, selectedWarehouse, count));
}
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private Entites.ProductsOnWarehouse CreateProductOnWarehouse(int id, Product product, Entites.Warehouse Warehouse, int count)
{
return Entites.ProductsOnWarehouse.CreateEntity(id, product, Warehouse, count);
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<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,103 @@
namespace ProjectSellPC.Forms.Warehouse
{
partial class WarehouseForm
{
/// <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()
{
deleteButton = new Button();
editButton = new Button();
addButton = new Button();
WarehousesDataGridView = new DataGridView();
((System.ComponentModel.ISupportInitialize)WarehousesDataGridView).BeginInit();
SuspendLayout();
//
// deleteButton
//
deleteButton.Location = new Point(869, 144);
deleteButton.Name = "deleteButton";
deleteButton.Size = new Size(161, 60);
deleteButton.TabIndex = 11;
deleteButton.Text = "Удалить";
deleteButton.UseVisualStyleBackColor = true;
deleteButton.Click += deleteButton_Click;
//
// editButton
//
editButton.Location = new Point(869, 78);
editButton.Name = "editButton";
editButton.Size = new Size(161, 60);
editButton.TabIndex = 10;
editButton.Text = "Редактировать";
editButton.UseVisualStyleBackColor = true;
editButton.Click += editButton_Click;
//
// addButton
//
addButton.BackColor = SystemColors.Control;
addButton.Location = new Point(869, 12);
addButton.Name = "addButton";
addButton.Size = new Size(161, 60);
addButton.TabIndex = 9;
addButton.Text = "Добавить";
addButton.UseVisualStyleBackColor = false;
addButton.Click += addButton_Click;
//
// WarehousesDataGridView
//
WarehousesDataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left;
WarehousesDataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
WarehousesDataGridView.Location = new Point(12, 12);
WarehousesDataGridView.Name = "WarehousesDataGridView";
WarehousesDataGridView.RowHeadersWidth = 51;
WarehousesDataGridView.Size = new Size(851, 416);
WarehousesDataGridView.TabIndex = 8;
//
// WarehouseForm
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1058, 440);
Controls.Add(deleteButton);
Controls.Add(editButton);
Controls.Add(addButton);
Controls.Add(WarehousesDataGridView);
Name = "WarehouseForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "Склады";
Load += WarehouseForm_Load;
((System.ComponentModel.ISupportInitialize)WarehousesDataGridView).EndInit();
ResumeLayout(false);
}
#endregion
private Button deleteButton;
private Button editButton;
private Button addButton;
private DataGridView WarehousesDataGridView;
}
}

View File

@@ -0,0 +1,102 @@

using ProjectSellPC.Repos;
using Unity;
namespace ProjectSellPC.Forms.Warehouse
{
public partial class WarehouseForm : Form
{
private readonly IUnityContainer _container;
private readonly IWarehouseRepository _repository;
public WarehouseForm(IUnityContainer unityContainer, IWarehouseRepository repository)
{
InitializeComponent();
_container = unityContainer ?? throw new ArgumentNullException(nameof(unityContainer));
_repository = repository ?? throw new ArgumentNullException(nameof(_repository));
}
private void WarehouseForm_Load(object sender, EventArgs e)
{
try
{
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => WarehousesDataGridView.DataSource = _repository.ReadAll();
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;
if (WarehousesDataGridView.SelectedRows.Count < 1)
{
MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
id = Convert.ToInt32(WarehousesDataGridView.SelectedRows[0].Cells["Id"].Value);
return true;
}
private void addButton_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<WarehouseSettingsForm>().ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void editButton_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
try
{
var form = _container.Resolve<WarehouseSettingsForm>();
form.Id = findId;
form.ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void deleteButton_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes)
{
return;
}
try
{
_repository.Delete(findId);
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<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,110 @@
namespace ProjectSellPC.Forms.Warehouse
{
partial class WarehouseSettingsForm
{
/// <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()
{
label3 = new Label();
sizeNumeric = new NumericUpDown();
label1 = new Label();
adressTextbox = new TextBox();
saveButton = new Button();
((System.ComponentModel.ISupportInitialize)sizeNumeric).BeginInit();
SuspendLayout();
//
// label3
//
label3.AutoSize = true;
label3.Location = new Point(12, 67);
label3.Name = "label3";
label3.Size = new Size(100, 20);
label3.TabIndex = 11;
label3.Text = "Вместимость";
//
// sizeNumeric
//
sizeNumeric.Location = new Point(119, 65);
sizeNumeric.Name = "sizeNumeric";
sizeNumeric.Size = new Size(99, 27);
sizeNumeric.TabIndex = 10;
sizeNumeric.ThousandsSeparator = true;
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(12, 22);
label1.Name = "label1";
label1.Size = new Size(104, 20);
label1.TabIndex = 9;
label1.Text = "Адрес склада:";
//
// adressTextbox
//
adressTextbox.Location = new Point(119, 19);
adressTextbox.Name = "adressTextbox";
adressTextbox.Size = new Size(210, 27);
adressTextbox.TabIndex = 8;
//
// saveButton
//
saveButton.Anchor = AnchorStyles.Bottom;
saveButton.Location = new Point(129, 117);
saveButton.Name = "saveButton";
saveButton.Size = new Size(94, 29);
saveButton.TabIndex = 7;
saveButton.Text = "Сохранить";
saveButton.UseVisualStyleBackColor = true;
saveButton.Click += saveButton_Click;
//
// WarehouseSettingsForm
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(364, 158);
Controls.Add(label3);
Controls.Add(sizeNumeric);
Controls.Add(label1);
Controls.Add(adressTextbox);
Controls.Add(saveButton);
Name = "WarehouseSettingsForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "Настройки склада";
Load += WarehouseFormSettings_Load;
((System.ComponentModel.ISupportInitialize)sizeNumeric).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label label3;
private NumericUpDown sizeNumeric;
private Label label1;
private TextBox adressTextbox;
private Button saveButton;
}
}

View File

@@ -0,0 +1,80 @@
using ProjectSellPC.Repos;
namespace ProjectSellPC.Forms.Warehouse
{
public partial class WarehouseSettingsForm : Form
{
private readonly IWarehouseRepository _repository;
private int? _WarehouseID;
public int Id
{
set
{
try
{
var Warehouse = _repository.Read(value);
if (Warehouse != null)
{
throw new InvalidDataException(nameof(Warehouse));
}
adressTextbox.Text = Warehouse.Adress;
sizeNumeric.Value = Warehouse.Size;
_WarehouseID = value;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
public WarehouseSettingsForm(IWarehouseRepository repository)
{
InitializeComponent();
_repository = repository ?? throw new ArgumentNullException(nameof(repository));
}
private void WarehouseFormSettings_Load(object sender, EventArgs e)
{
}
private void saveButton_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrWhiteSpace(adressTextbox.Text))
{
throw new Exception("Имеются незаполненные поля");
}
if (_WarehouseID.HasValue)
{
_repository.Update(CreateWarehouse(_WarehouseID.Value));
}
else
{
_repository.Update(CreateWarehouse(0));
}
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private Entites.Warehouse CreateWarehouse(int id)
{
return Entites.Warehouse.CreateEntity(id, (int)sizeNumeric.Value, adressTextbox.Text);
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<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

@@ -1,3 +1,8 @@
using ProjectSellPC.Repos;
using ProjectSellPC.Repos.Impements;
using Unity;
using Unity.Lifetime;
namespace ProjectSellPC
{
internal static class Program
@@ -8,10 +13,20 @@ namespace ProjectSellPC
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(new Form1());
Application.Run(CreateContainer().Resolve<ShopForm>());
}
private static IUnityContainer CreateContainer()
{
var container = new UnityContainer();
container.RegisterType<IProductRepository, ProductRepo>(new TransientLifetimeManager());
container.RegisterType<IClientRepository, ClientRepo>(new TransientLifetimeManager());
container.RegisterType<IWarehouseRepository, WarehouseRepo>(new TransientLifetimeManager());
container.RegisterType<IProductOnWarehouseRepository, ProductsOnWarehouseRepo>(new TransientLifetimeManager());
container.RegisterType<IChequeRepository, ChequeRepo>(new TransientLifetimeManager());
return container;
}
}
}

View File

@@ -8,4 +8,8 @@
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Unity" Version="5.11.10" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программой.
// Исполняемая версия:4.0.30319.42000
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ProjectSellPC.Properties {
using System;
/// <summary>
/// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
/// </summary>
// Этот класс создан автоматически классом StronglyTypedResourceBuilder
// с помощью такого средства, как ResGen или Visual Studio.
// Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
// с параметром /str или перестройте свой проект VS.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ProjectSellPC.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Перезаписывает свойство CurrentUICulture текущего потока для всех
/// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,11 @@
using ProjectSellPC.Entites;
namespace ProjectSellPC.Repos
{
public interface IChequeRepository
{
IEnumerable<Cheque> ReadAll();
Cheque Read(int id);
void Create(Cheque Cheque);
}
}

View File

@@ -0,0 +1,13 @@
using ProjectSellPC.Entites;
namespace ProjectSellPC.Repos
{
public interface IClientRepository
{
IEnumerable<Client> ReadAll();
Client Read(int id);
void Create(Client client);
Client Update(Client client);
void Delete(int id);
}
}

View File

@@ -0,0 +1,11 @@
using ProjectSellPC.Entites;
namespace ProjectSellPC.Repos
{
public interface IProductOnWarehouseRepository
{
IEnumerable<ProductsOnWarehouse> ReadAll();
ProductsOnWarehouse Read(int id);
void Create(ProductsOnWarehouse ps);
ProductsOnWarehouse Update(ProductsOnWarehouse Warehouse);
}
}

View File

@@ -0,0 +1,13 @@
using ProjectSellPC.Entites;
namespace ProjectSellPC.Repos
{
public interface IProductRepository
{
IEnumerable<Product> ReadAll();
Product Read(int id);
void Create(Product product);
Product Update(Product product);
void Delete(int id);
}
}

View File

@@ -0,0 +1,13 @@
using ProjectSellPC.Entites;
namespace ProjectSellPC.Repos
{
public interface IWarehouseRepository
{
IEnumerable<Warehouse> ReadAll();
Warehouse Read(int id);
void Create(Warehouse Warehouse);
Warehouse Update(Warehouse Warehouse);
void Delete(int id);
}
}

View File

@@ -0,0 +1,23 @@
using ProjectSellPC.Entites;
namespace ProjectSellPC.Repos.Impements
{
public class ChequeRepo : IChequeRepository
{
public void Create(Cheque Cheque)
{
}
public Cheque Read(int id)
{
return Cheque.CreateEntity(0, new List<ProductInCheque>(), new Client(), DateTime.Now);
}
public IEnumerable<Cheque> ReadAll()
{
return new List<Cheque>();
}
}
}

View File

@@ -0,0 +1,33 @@
using ProjectSellPC.Entites;
using ProjectSellPC.Entites.Enums;
namespace ProjectSellPC.Repos.Impements
{
public class ClientRepo : IClientRepository
{
public void Create(Client client)
{
}
public void Delete(int id)
{
}
public Client Read(int id)
{
return Client.CreateEntity(0, string.Empty, string.Empty, ClientType.Individual);
}
public IEnumerable<Client> ReadAll()
{
return new List<Client>();
}
public Client Update(Client client)
{
return Client.CreateEntity(0, string.Empty, string.Empty, ClientType.Individual);
}
}
}

View File

@@ -0,0 +1,33 @@
using ProjectSellPC.Entites;
using ProjectSellPC.Entites.Enums;
namespace ProjectSellPC.Repos.Impements
{
public class ProductRepo : IProductRepository
{
public void Create(Product product)
{
}
public void Delete(int id)
{
}
public Product Read(int id)
{
return Product.CreateEntity(0, string.Empty, string.Empty, 0, ProductType.None);
}
public IEnumerable<Product> ReadAll()
{
return new List<Product>();
}
public Product Update(Product product)
{
return Product.CreateEntity(0, string.Empty, string.Empty, 0, ProductType.None);
}
}
}

View File

@@ -0,0 +1,27 @@
using ProjectSellPC.Entites;
namespace ProjectSellPC.Repos.Impements
{
public class ProductsOnWarehouseRepo : IProductOnWarehouseRepository
{
public void Create(ProductsOnWarehouse ps)
{
}
public ProductsOnWarehouse Read(int id)
{
return ProductsOnWarehouse.CreateEntity(0, new Product(), new Warehouse(), 0);
}
public IEnumerable<ProductsOnWarehouse> ReadAll()
{
return new List<ProductsOnWarehouse>();
}
public ProductsOnWarehouse Update(ProductsOnWarehouse Warehouse)
{
return ProductsOnWarehouse.CreateEntity(0, new Product(), new Warehouse(), 0);
}
}
}

View File

@@ -0,0 +1,32 @@
using ProjectSellPC.Entites;
namespace ProjectSellPC.Repos.Impements
{
public class WarehouseRepo: IWarehouseRepository
{
public void Create(Warehouse Warehouse)
{
}
public void Delete(int id)
{
}
public Warehouse Read(int id)
{
return Warehouse.CreateEntity(0, 0, string.Empty);
}
public IEnumerable<Warehouse> ReadAll()
{
return new List<Warehouse>();
}
public Warehouse Update(Warehouse Warehouse)
{
return Warehouse.CreateEntity(0, 0, string.Empty);
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB