From 4546884a3380be2caec52b0c4ac66f3674ad4f88 Mon Sep 17 00:00:00 2001 From: Glliza Date: Thu, 28 Nov 2024 19:51:58 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=20=E2=84=961?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ShoeStore/Entities/Employee.cs | 2 +- ShoeStore/Entities/Product.cs | 5 +- ShoeStore/Entities/ProductSale.cs | 2 +- ShoeStore/Entities/Receipt.cs | 4 +- ShoeStore/Entities/Sale.cs | 2 +- ShoeStore/Entities/Storage.cs | 2 +- ShoeStore/Forms/FormEmployee.Designer.cs | 143 +++++++++++ ShoeStore/Forms/FormEmployee.cs | 73 ++++++ ShoeStore/Forms/FormEmployee.resx | 120 +++++++++ ShoeStore/Forms/FormEmployees.Designer.cs | 121 +++++++++ ShoeStore/Forms/FormEmployees.cs | 103 ++++++++ ShoeStore/Forms/FormEmployees.resx | 120 +++++++++ ShoeStore/Forms/FormProduct.Designer.cs | 235 ++++++++++++++++++ ShoeStore/Forms/FormProduct.cs | 104 ++++++++ ShoeStore/Forms/FormProduct.resx | 120 +++++++++ ShoeStore/Forms/FormProducts.Designer.cs | 117 +++++++++ ShoeStore/Forms/FormProducts.cs | 110 ++++++++ ShoeStore/Forms/FormProducts.resx | 120 +++++++++ ShoeStore/Forms/FormReceipt.Designer.cs | 191 ++++++++++++++ ShoeStore/Forms/FormReceipt.cs | 53 ++++ ShoeStore/Forms/FormReceipt.resx | 120 +++++++++ ShoeStore/Forms/FormReceipts.Designer.cs | 90 +++++++ ShoeStore/Forms/FormReceipts.cs | 42 ++++ ShoeStore/Forms/FormReceipts.resx | 120 +++++++++ ShoeStore/Forms/FormSale.Designer.cs | 193 ++++++++++++++ ShoeStore/Forms/FormSale.cs | 58 +++++ ShoeStore/Forms/FormSale.resx | 120 +++++++++ ShoeStore/Forms/FormSales.Designer.cs | 106 ++++++++ ShoeStore/Forms/FormSales.cs | 90 +++++++ ShoeStore/Forms/FormSales.resx | 120 +++++++++ ShoeStore/Forms/FormStorage.Designer.cs | 145 +++++++++++ ShoeStore/Forms/FormStorage.cs | 89 +++++++ ShoeStore/Forms/FormStorage.resx | 120 +++++++++ ShoeStore/Forms/FormStorages.Designer.cs | 117 +++++++++ ShoeStore/Forms/FormStorages.cs | 99 ++++++++ ShoeStore/Forms/FormStorages.resx | 120 +++++++++ ShoeStore/Program.cs | 18 +- ShoeStore/Properties/Resources.Designer.cs | 113 +++++++++ ShoeStore/Properties/Resources.resx | 136 ++++++++++ ShoeStore/Repositories/IProductRepository.cs | 2 +- ShoeStore/Repositories/ISaleRepository.cs | 2 +- .../Implementations/EmployeeRepository.cs | 33 +++ .../Implementations/ProductRepository.cs | 35 +++ .../Implementations/ReceiptRepository.cs | 20 ++ .../Implementations/SaleRepository.cs | 24 ++ .../Implementations/StorageRepository.cs | 33 +++ ShoeStore/Resources/карандащ.png | Bin 0 -> 12138 bytes ShoeStore/Resources/минус.png | Bin 0 -> 230005 bytes ShoeStore/Resources/обувной.jpg | Bin 0 -> 104827 bytes ShoeStore/Resources/плюс.png | Bin 0 -> 3021 bytes ShoeStore/Resources/плюс1.png | Bin 0 -> 3021 bytes ShoeStore/ShoeStore.Designer.cs | 137 ++++++++++ ShoeStore/ShoeStore.cs | 87 +++++++ ShoeStore/ShoeStore.csproj | 17 +- ShoeStore/ShoeStore.resx | 123 +++++++++ ShoeStore/ShoeStore.sln | 2 +- 56 files changed, 4264 insertions(+), 14 deletions(-) create mode 100644 ShoeStore/Forms/FormEmployee.Designer.cs create mode 100644 ShoeStore/Forms/FormEmployee.cs create mode 100644 ShoeStore/Forms/FormEmployee.resx create mode 100644 ShoeStore/Forms/FormEmployees.Designer.cs create mode 100644 ShoeStore/Forms/FormEmployees.cs create mode 100644 ShoeStore/Forms/FormEmployees.resx create mode 100644 ShoeStore/Forms/FormProduct.Designer.cs create mode 100644 ShoeStore/Forms/FormProduct.cs create mode 100644 ShoeStore/Forms/FormProduct.resx create mode 100644 ShoeStore/Forms/FormProducts.Designer.cs create mode 100644 ShoeStore/Forms/FormProducts.cs create mode 100644 ShoeStore/Forms/FormProducts.resx create mode 100644 ShoeStore/Forms/FormReceipt.Designer.cs create mode 100644 ShoeStore/Forms/FormReceipt.cs create mode 100644 ShoeStore/Forms/FormReceipt.resx create mode 100644 ShoeStore/Forms/FormReceipts.Designer.cs create mode 100644 ShoeStore/Forms/FormReceipts.cs create mode 100644 ShoeStore/Forms/FormReceipts.resx create mode 100644 ShoeStore/Forms/FormSale.Designer.cs create mode 100644 ShoeStore/Forms/FormSale.cs create mode 100644 ShoeStore/Forms/FormSale.resx create mode 100644 ShoeStore/Forms/FormSales.Designer.cs create mode 100644 ShoeStore/Forms/FormSales.cs create mode 100644 ShoeStore/Forms/FormSales.resx create mode 100644 ShoeStore/Forms/FormStorage.Designer.cs create mode 100644 ShoeStore/Forms/FormStorage.cs create mode 100644 ShoeStore/Forms/FormStorage.resx create mode 100644 ShoeStore/Forms/FormStorages.Designer.cs create mode 100644 ShoeStore/Forms/FormStorages.cs create mode 100644 ShoeStore/Forms/FormStorages.resx create mode 100644 ShoeStore/Properties/Resources.Designer.cs create mode 100644 ShoeStore/Properties/Resources.resx create mode 100644 ShoeStore/Repositories/Implementations/EmployeeRepository.cs create mode 100644 ShoeStore/Repositories/Implementations/ProductRepository.cs create mode 100644 ShoeStore/Repositories/Implementations/ReceiptRepository.cs create mode 100644 ShoeStore/Repositories/Implementations/SaleRepository.cs create mode 100644 ShoeStore/Repositories/Implementations/StorageRepository.cs create mode 100644 ShoeStore/Resources/карандащ.png create mode 100644 ShoeStore/Resources/минус.png create mode 100644 ShoeStore/Resources/обувной.jpg create mode 100644 ShoeStore/Resources/плюс.png create mode 100644 ShoeStore/Resources/плюс1.png create mode 100644 ShoeStore/ShoeStore.Designer.cs create mode 100644 ShoeStore/ShoeStore.cs create mode 100644 ShoeStore/ShoeStore.resx diff --git a/ShoeStore/Entities/Employee.cs b/ShoeStore/Entities/Employee.cs index 2bacd40..54af1f2 100644 --- a/ShoeStore/Entities/Employee.cs +++ b/ShoeStore/Entities/Employee.cs @@ -13,7 +13,7 @@ public class Employee public int NumberStorage { get; private set; } public int StorageSize { get; private set; } - public Employee CreateEntity(int id, int numberStorage, int storageSize) + public static Employee CreateEntity(int id, int numberStorage, int storageSize) { return new Employee { diff --git a/ShoeStore/Entities/Product.cs b/ShoeStore/Entities/Product.cs index 88945de..6d25a6d 100644 --- a/ShoeStore/Entities/Product.cs +++ b/ShoeStore/Entities/Product.cs @@ -12,16 +12,13 @@ public class Product { public int Id { get; private set; } public int StorageProductId { get; private set; } - public string NameOfShoes { get; private set; } - public ManufacturingCompany ManufacturingCompany { get; private set; } - public int Price { get; private set; } public ProductType ProductType { get; private set; } public int StorageSize { get; private set; } - public Product CreateEntity(int id, int storageProductId, string nameOfShoes, ManufacturingCompany manufacturingCompany, int price, + public static Product CreateEntity(int id, int storageProductId, string nameOfShoes, ManufacturingCompany manufacturingCompany, int price, ProductType productType, int storageSize) { return new Product diff --git a/ShoeStore/Entities/ProductSale.cs b/ShoeStore/Entities/ProductSale.cs index fdc258f..e1903d1 100644 --- a/ShoeStore/Entities/ProductSale.cs +++ b/ShoeStore/Entities/ProductSale.cs @@ -12,7 +12,7 @@ public class ProductSale public int SaleId { get; private set; } public int Amount { get; private set; } - public ProductSale CreateEntities(int productId, int saleId, int amount) + public static ProductSale CreateEntities(int productId, int saleId, int amount) { return new ProductSale { ProductId = productId, diff --git a/ShoeStore/Entities/Receipt.cs b/ShoeStore/Entities/Receipt.cs index b851c80..d5edff2 100644 --- a/ShoeStore/Entities/Receipt.cs +++ b/ShoeStore/Entities/Receipt.cs @@ -9,17 +9,19 @@ namespace ShoeStore.Entities; public class Receipt { public int Id { get; private set; } + public int ProductId { get; private set; } public int StorageProductId { get; private set; } public int ReceiptNumber {get; private set; } public DateTime DateOfReceipt { get; private set; } public int NumberOfPairsReceived { get; private set; } public int StorageSize { get; private set; } - public Receipt CreateOperation(int id, int storageProductId, int receiptNumber, int numberOfPairsReceived, int storageSize) + public static Receipt CreateOperation(int id, int productId, int storageProductId, int receiptNumber, int numberOfPairsReceived, int storageSize) { return new Receipt { Id = id, + ProductId = productId, StorageProductId = storageProductId, ReceiptNumber = receiptNumber, DateOfReceipt = DateTime.Now, diff --git a/ShoeStore/Entities/Sale.cs b/ShoeStore/Entities/Sale.cs index 28a760d..c263b8f 100644 --- a/ShoeStore/Entities/Sale.cs +++ b/ShoeStore/Entities/Sale.cs @@ -20,7 +20,7 @@ public class Sale private set; } = []; - public Sale CreateOperation (int id, int productId, int storageProductId, int salesNumber, int storageSize) + public static Sale CreateOperation (int id, int productId, int storageProductId, int salesNumber, int storageSize) { return new Sale { diff --git a/ShoeStore/Entities/Storage.cs b/ShoeStore/Entities/Storage.cs index 1f5eb01..1d0c332 100644 --- a/ShoeStore/Entities/Storage.cs +++ b/ShoeStore/Entities/Storage.cs @@ -11,7 +11,7 @@ public class Storage public int Size { get; private set; } public int QuantityInStock { get; private set; } public int NumberStorage { get; private set; } - public Storage CreateEntity(int size, int quantityInStock, int numberStorage) + public static Storage CreateEntity(int size, int quantityInStock, int numberStorage) { return new Storage { diff --git a/ShoeStore/Forms/FormEmployee.Designer.cs b/ShoeStore/Forms/FormEmployee.Designer.cs new file mode 100644 index 0000000..11be70d --- /dev/null +++ b/ShoeStore/Forms/FormEmployee.Designer.cs @@ -0,0 +1,143 @@ +namespace ShoeStore.Froms +{ + partial class FormEmployee + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + dateTimePickerDate = new DateTimePicker(); + label1 = new Label(); + label2 = new Label(); + label3 = new Label(); + numericUpDownNumStorage = new NumericUpDown(); + numericUpDownStorageSize = new NumericUpDown(); + buttonSave = new Button(); + buttonCancel = new Button(); + ((System.ComponentModel.ISupportInitialize)numericUpDownNumStorage).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownStorageSize).BeginInit(); + SuspendLayout(); + // + // dateTimePickerDate + // + dateTimePickerDate.Location = new Point(179, 41); + dateTimePickerDate.Name = "dateTimePickerDate"; + dateTimePickerDate.Size = new Size(132, 23); + dateTimePickerDate.TabIndex = 0; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(40, 47); + label1.Name = "label1"; + label1.Size = new Size(35, 15); + label1.TabIndex = 1; + label1.Text = "Дата:"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(40, 115); + label2.Name = "label2"; + label2.Size = new Size(88, 15); + label2.TabIndex = 2; + label2.Text = "Номер склада:"; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(40, 178); + label3.Name = "label3"; + label3.Size = new Size(106, 15); + label3.TabIndex = 3; + label3.Text = "Размер на складе:"; + // + // numericUpDownNumStorage + // + numericUpDownNumStorage.Location = new Point(179, 107); + numericUpDownNumStorage.Name = "numericUpDownNumStorage"; + numericUpDownNumStorage.Size = new Size(132, 23); + numericUpDownNumStorage.TabIndex = 4; + // + // numericUpDownStorageSize + // + numericUpDownStorageSize.Location = new Point(179, 176); + numericUpDownStorageSize.Name = "numericUpDownStorageSize"; + numericUpDownStorageSize.Size = new Size(132, 23); + numericUpDownStorageSize.TabIndex = 5; + // + // buttonSave + // + buttonSave.Location = new Point(40, 251); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(106, 23); + buttonSave.TabIndex = 6; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click_1; + // + // buttonCancel + // + buttonCancel.Location = new Point(205, 251); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(106, 23); + buttonCancel.TabIndex = 7; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click_1; + // + // FormEmployee + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(352, 316); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(numericUpDownStorageSize); + Controls.Add(numericUpDownNumStorage); + Controls.Add(label3); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(dateTimePickerDate); + Name = "FormEmployee"; + Text = "Сотрудник"; + ((System.ComponentModel.ISupportInitialize)numericUpDownNumStorage).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownStorageSize).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private DateTimePicker dateTimePickerDate; + private Label label1; + private Label label2; + private Label label3; + private NumericUpDown numericUpDownNumStorage; + private NumericUpDown numericUpDownStorageSize; + private Button buttonSave; + private Button buttonCancel; + } +} \ No newline at end of file diff --git a/ShoeStore/Forms/FormEmployee.cs b/ShoeStore/Forms/FormEmployee.cs new file mode 100644 index 0000000..53a956e --- /dev/null +++ b/ShoeStore/Forms/FormEmployee.cs @@ -0,0 +1,73 @@ +using ShoeStore.Entities; +using ShoeStore.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ShoeStore.Froms; + +public partial class FormEmployee : Form +{ + private readonly IEmployeeRepository _employeeRepository; + private int? _employeeId; + + public int Id + { + set + { + try + { + var employee = _employeeRepository.ReadEmployeeById(value); + if (employee == null) + { + throw new InvalidDataException(nameof(employee)); + } + numericUpDownNumStorage.Value = employee.NumberStorage; + numericUpDownStorageSize.Value = (decimal)employee.StorageSize; + _employeeId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FormEmployee() + { + InitializeComponent(); + } + + private void ButtonSave_Click_1(object sender, EventArgs e) + { + try + { + if (_employeeId.HasValue) + { + _employeeRepository.UpdateEmployee(CreateEmployee(_employeeId.Value)); + } + else + { + _employeeRepository.CreateEmployee(CreateEmployee(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click_1(object sender, EventArgs e) => Close(); + + private Employee CreateEmployee(int id) => Employee.CreateEntity(id, Convert.ToInt32(numericUpDownNumStorage.Value), + Convert.ToInt32(numericUpDownStorageSize.Value)); +} diff --git a/ShoeStore/Forms/FormEmployee.resx b/ShoeStore/Forms/FormEmployee.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ShoeStore/Forms/FormEmployee.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ShoeStore/Forms/FormEmployees.Designer.cs b/ShoeStore/Forms/FormEmployees.Designer.cs new file mode 100644 index 0000000..2b47217 --- /dev/null +++ b/ShoeStore/Forms/FormEmployees.Designer.cs @@ -0,0 +1,121 @@ +namespace ShoeStore.Froms +{ + partial class FormEmployees + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + dataGridViewData = new DataGridView(); + panel1 = new Panel(); + buttonDel = new Button(); + buttonUpd = new Button(); + buttonAdd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // dataGridViewData + // + dataGridViewData.AllowUserToAddRows = false; + dataGridViewData.AllowUserToDeleteRows = false; + dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewData.Dock = DockStyle.Fill; + dataGridViewData.Location = new Point(0, 0); + dataGridViewData.Name = "dataGridViewData"; + dataGridViewData.ReadOnly = true; + dataGridViewData.Size = new Size(800, 450); + dataGridViewData.TabIndex = 0; + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonUpd); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(676, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(124, 450); + panel1.TabIndex = 1; + // + // buttonDel + // + buttonDel.BackColor = SystemColors.ControlLightLight; + buttonDel.BackgroundImage = Properties.Resources.минус; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(14, 233); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(98, 86); + buttonDel.TabIndex = 2; + buttonDel.UseVisualStyleBackColor = false; + buttonDel.Click += ButtonDel_Click; + // + // buttonUpd + // + buttonUpd.BackColor = SystemColors.ControlLightLight; + buttonUpd.BackgroundImage = Properties.Resources.карандащ; + buttonUpd.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpd.Location = new Point(14, 132); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(98, 86); + buttonUpd.TabIndex = 1; + buttonUpd.UseVisualStyleBackColor = false; + buttonUpd.Click += ButtonUpd_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.плюс; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(14, 31); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(98, 86); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // FormEmployees + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(panel1); + Controls.Add(dataGridViewData); + Name = "FormEmployees"; + Text = "FormEmployees"; + Load += FormEmployees_Load; + ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit(); + panel1.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridViewData; + private Panel panel1; + private Button buttonAdd; + private Button buttonDel; + private Button buttonUpd; + } +} \ No newline at end of file diff --git a/ShoeStore/Forms/FormEmployees.cs b/ShoeStore/Forms/FormEmployees.cs new file mode 100644 index 0000000..a5aed2d --- /dev/null +++ b/ShoeStore/Forms/FormEmployees.cs @@ -0,0 +1,103 @@ +using ShoeStore.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace ShoeStore.Froms; + +public partial class FormEmployees : Form +{ + private readonly IUnityContainer _container; + private readonly IEmployeeRepository _employeeRepository; + public FormEmployees(IUnityContainer container, IEmployeeRepository employeeRepository) + { + InitializeComponent(); + _container = container; + _employeeRepository = employeeRepository; + } + + private void FormEmployees_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _employeeRepository.DeleteEmployee(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void LoadList() => dataGridViewData.DataSource = _employeeRepository.ReadEmployees(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridViewData.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = + Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["Id"].Value); + return true; + } +} diff --git a/ShoeStore/Forms/FormEmployees.resx b/ShoeStore/Forms/FormEmployees.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ShoeStore/Forms/FormEmployees.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ShoeStore/Forms/FormProduct.Designer.cs b/ShoeStore/Forms/FormProduct.Designer.cs new file mode 100644 index 0000000..47296d8 --- /dev/null +++ b/ShoeStore/Forms/FormProduct.Designer.cs @@ -0,0 +1,235 @@ +namespace ShoeStore.Forms +{ + partial class FormProduct + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + label1 = new Label(); + comboBoxProduct = new ComboBox(); + comboBoxStorageProductId = new ComboBox(); + label5 = new Label(); + numericUpDownPrice = new NumericUpDown(); + label2 = new Label(); + label3 = new Label(); + label4 = new Label(); + comboBoxType = new ComboBox(); + label6 = new Label(); + label7 = new Label(); + buttonCancel = new Button(); + buttonSave = new Button(); + checkedListBoxManufactoringCompany = new CheckedListBox(); + textBoxNameShoe = new TextBox(); + numericUpDownStorage = new NumericUpDown(); + ((System.ComponentModel.ISupportInitialize)numericUpDownPrice).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownStorage).BeginInit(); + SuspendLayout(); + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(24, 38); + label1.Name = "label1"; + label1.Size = new Size(76, 15); + label1.TabIndex = 10; + label1.Text = "ID Продукта:"; + // + // comboBoxProduct + // + comboBoxProduct.FormattingEnabled = true; + comboBoxProduct.Location = new Point(244, 38); + comboBoxProduct.Name = "comboBoxProduct"; + comboBoxProduct.Size = new Size(121, 23); + comboBoxProduct.TabIndex = 9; + // + // comboBoxStorageProductId + // + comboBoxStorageProductId.FormattingEnabled = true; + comboBoxStorageProductId.Location = new Point(244, 84); + comboBoxStorageProductId.Name = "comboBoxStorageProductId"; + comboBoxStorageProductId.Size = new Size(121, 23); + comboBoxStorageProductId.TabIndex = 16; + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(24, 84); + label5.Name = "label5"; + label5.Size = new Size(132, 15); + label5.TabIndex = 15; + label5.Text = "ID Продуктa на складе:"; + // + // numericUpDownPrice + // + numericUpDownPrice.Location = new Point(241, 297); + numericUpDownPrice.Name = "numericUpDownPrice"; + numericUpDownPrice.Size = new Size(120, 23); + numericUpDownPrice.TabIndex = 18; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(24, 132); + label2.Name = "label2"; + label2.Size = new Size(98, 15); + label2.TabIndex = 20; + label2.Text = "Название обуви:"; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(24, 182); + label3.Name = "label3"; + label3.Size = new Size(154, 15); + label3.TabIndex = 21; + label3.Text = "Компания-производитель:"; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(20, 297); + label4.Name = "label4"; + label4.Size = new Size(38, 15); + label4.TabIndex = 22; + label4.Text = "Цена:"; + // + // comboBoxType + // + comboBoxType.FormattingEnabled = true; + comboBoxType.Location = new Point(240, 347); + comboBoxType.Name = "comboBox1"; + comboBoxType.Size = new Size(121, 23); + comboBoxType.TabIndex = 23; + // + // label6 + // + label6.AutoSize = true; + label6.Location = new Point(20, 355); + label6.Name = "label6"; + label6.Size = new Size(83, 15); + label6.TabIndex = 25; + label6.Text = "Тип продукта:"; + // + // label7 + // + label7.AutoSize = true; + label7.Location = new Point(20, 403); + label7.Name = "label7"; + label7.Size = new Size(106, 15); + label7.TabIndex = 26; + label7.Text = "Размер на складе:"; + // + // buttonCancel + // + buttonCancel.Location = new Point(245, 464); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(102, 23); + buttonCancel.TabIndex = 28; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += buttonCancel_Click; + // + // buttonSave + // + buttonSave.Location = new Point(45, 464); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(100, 23); + buttonSave.TabIndex = 27; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += buttonSave_Click; + // + // checkedListBoxManufactoringCompany + // + checkedListBoxManufactoringCompany.FormattingEnabled = true; + checkedListBoxManufactoringCompany.Location = new Point(240, 182); + checkedListBoxManufactoringCompany.Name = "checkedListBoxManufactoringCompany"; + checkedListBoxManufactoringCompany.Size = new Size(120, 94); + checkedListBoxManufactoringCompany.TabIndex = 29; + // + // textBoxNameShoe + // + textBoxNameShoe.Location = new Point(128, 132); + textBoxNameShoe.Name = "textBoxNameShoe"; + textBoxNameShoe.Size = new Size(237, 23); + textBoxNameShoe.TabIndex = 31; + // + // numericUpDownStorage + // + numericUpDownStorage.Location = new Point(240, 401); + numericUpDownStorage.Name = "numericUpDownStorage"; + numericUpDownStorage.Size = new Size(120, 23); + numericUpDownStorage.TabIndex = 32; + // + // FormProduct + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(403, 545); + Controls.Add(numericUpDownStorage); + Controls.Add(textBoxNameShoe); + Controls.Add(checkedListBoxManufactoringCompany); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(label7); + Controls.Add(label6); + Controls.Add(comboBoxType); + Controls.Add(label4); + Controls.Add(label3); + Controls.Add(label2); + Controls.Add(numericUpDownPrice); + Controls.Add(comboBoxStorageProductId); + Controls.Add(label5); + Controls.Add(label1); + Controls.Add(comboBoxProduct); + Name = "FormProduct"; + Text = "FormProduct"; + ((System.ComponentModel.ISupportInitialize)numericUpDownPrice).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownStorage).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label label1; + private ComboBox comboBoxProduct; + private ComboBox comboBoxStorageProductId; + private Label label5; + private NumericUpDown numericUpDownPrice; + private Label label2; + private Label label3; + private Label label4; + private ComboBox comboBoxType; + private Label label6; + private Label label7; + private Button buttonCancel; + private Button buttonSave; + private CheckedListBox checkedListBoxManufactoringCompany; + private TextBox textBoxNameShoe; + private NumericUpDown numericUpDownStorage; + } +} \ No newline at end of file diff --git a/ShoeStore/Forms/FormProduct.cs b/ShoeStore/Forms/FormProduct.cs new file mode 100644 index 0000000..023a462 --- /dev/null +++ b/ShoeStore/Forms/FormProduct.cs @@ -0,0 +1,104 @@ +using Microsoft.VisualBasic.FileIO; +using ShoeStore.Entities; +using ShoeStore.Entities.Enums; +using ShoeStore.Repositories; +using ShoeStore.Repositories.Implementations; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics.Eventing.Reader; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; + +namespace ShoeStore.Forms +{ + public partial class FormProduct : Form + { + private readonly IProductRepository _productRepository; + + private int? _productId; + public int Id + { + set + { + try + { + var product = _productRepository.ReadProductById(value); + + if (product == null) + { + throw new InvalidDataException(nameof(product)); + } + + foreach (ManufacturingCompany company in Enum.GetValues(typeof(ManufacturingCompany))) + { + if ((company & product.ManufacturingCompany) != 0) + { + checkedListBoxManufactoringCompany.SetItemChecked( + checkedListBoxManufactoringCompany.Items.IndexOf(company), true); + } + } + + textBoxNameShoe.Text = product.NameOfShoes; + numericUpDownPrice.Value = product.Price; + comboBoxStorageProductId.SelectedItem = product.StorageProductId; + comboBoxType.SelectedItem = product.ProductType; + numericUpDownStorage.Value = product.StorageSize; + + _productId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + public FormProduct(IProductRepository productRepository) + { + InitializeComponent(); + _productRepository = productRepository ?? throw new ArgumentNullException(nameof(productRepository)); + comboBoxType.DataSource = Enum.GetValues(typeof(ProductType)); + foreach (var elem in Enum.GetValues(typeof(ManufacturingCompany))) + { + checkedListBoxManufactoringCompany.Items.Add(elem); + } + } + + private void buttonSave_Click(object sender, EventArgs e) + { + try + { + if (comboBoxProduct.SelectedIndex < 0 || comboBoxStorageProductId.SelectedIndex < 0 || checkedListBoxManufactoringCompany.CheckedItems.Count == 0) + { + throw new Exception("Имеются незаполненные поля"); + } + _productRepository.CreateProduct(CreateProduct(0)); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonCancel_Click(object sender, EventArgs e) => Close(); + + Product CreateProduct(int id) + { + ManufacturingCompany manufacturingCompany = ManufacturingCompany.None; + foreach (var elem in checkedListBoxManufactoringCompany.CheckedItems) + { + manufacturingCompany |= (ManufacturingCompany)elem; + } + return Product.CreateEntity(id, (int)comboBoxStorageProductId.SelectedValue!, + textBoxNameShoe.Text, manufacturingCompany, Convert.ToInt32(numericUpDownPrice.Value), (ProductType)comboBoxType.SelectedItem!, (int)numericUpDownStorage.Value!); + } + } +} diff --git a/ShoeStore/Forms/FormProduct.resx b/ShoeStore/Forms/FormProduct.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ShoeStore/Forms/FormProduct.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ShoeStore/Forms/FormProducts.Designer.cs b/ShoeStore/Forms/FormProducts.Designer.cs new file mode 100644 index 0000000..5f1d910 --- /dev/null +++ b/ShoeStore/Forms/FormProducts.Designer.cs @@ -0,0 +1,117 @@ +namespace ShoeStore.Forms +{ + partial class FormProducts + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + dataGridViewProduct = new DataGridView(); + panel1 = new Panel(); + buttonDel = new Button(); + buttonUpd = new Button(); + buttonAdd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridViewProduct).BeginInit(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // dataGridViewProduct + // + dataGridViewProduct.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewProduct.Dock = DockStyle.Fill; + dataGridViewProduct.Location = new Point(0, 0); + dataGridViewProduct.Name = "dataGridViewProduct"; + dataGridViewProduct.Size = new Size(787, 450); + dataGridViewProduct.TabIndex = 0; + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonUpd); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(611, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(176, 450); + panel1.TabIndex = 1; + // + // buttonDel + // + buttonDel.BackColor = SystemColors.ControlLightLight; + buttonDel.BackgroundImage = Properties.Resources.минус; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(42, 251); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(98, 86); + buttonDel.TabIndex = 5; + buttonDel.UseVisualStyleBackColor = false; + buttonDel.Click += buttonDel_Click; + // + // buttonUpd + // + buttonUpd.BackColor = SystemColors.ControlLightLight; + buttonUpd.BackgroundImage = Properties.Resources.карандащ; + buttonUpd.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpd.Location = new Point(42, 150); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(98, 86); + buttonUpd.TabIndex = 4; + buttonUpd.UseVisualStyleBackColor = false; + buttonUpd.Click += buttonUpd_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.плюс1; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(42, 49); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(98, 86); + buttonAdd.TabIndex = 3; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += buttonAdd_Click; + // + // FormProducts + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(787, 450); + Controls.Add(panel1); + Controls.Add(dataGridViewProduct); + Name = "FormProducts"; + Text = "FormProducts"; + ((System.ComponentModel.ISupportInitialize)dataGridViewProduct).EndInit(); + panel1.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridViewProduct; + private Panel panel1; + private Button buttonDel; + private Button buttonUpd; + private Button buttonAdd; + } +} \ No newline at end of file diff --git a/ShoeStore/Forms/FormProducts.cs b/ShoeStore/Forms/FormProducts.cs new file mode 100644 index 0000000..ea2f38b --- /dev/null +++ b/ShoeStore/Forms/FormProducts.cs @@ -0,0 +1,110 @@ +using ShoeStore.Froms; +using ShoeStore.Repositories; +using ShoeStore.Repositories.Implementations; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Xml.Linq; +using Unity; + +namespace ShoeStore.Forms +{ + public partial class FormProducts : Form + { + private readonly IUnityContainer _container; + private readonly IProductRepository _productRepository; + public FormProducts(IUnityContainer container, IProductRepository productRepository) + { + InitializeComponent(); + _container = container; + _productRepository = productRepository; + } + + private void FormEmployees_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _productRepository.DeleteProduct(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void LoadList() => dataGridViewProduct.DataSource = _productRepository.ReadProducts(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridViewProduct.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = + Convert.ToInt32(dataGridViewProduct.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} diff --git a/ShoeStore/Forms/FormProducts.resx b/ShoeStore/Forms/FormProducts.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ShoeStore/Forms/FormProducts.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ShoeStore/Forms/FormReceipt.Designer.cs b/ShoeStore/Forms/FormReceipt.Designer.cs new file mode 100644 index 0000000..fc0305c --- /dev/null +++ b/ShoeStore/Forms/FormReceipt.Designer.cs @@ -0,0 +1,191 @@ +namespace ShoeStore.Froms +{ + partial class FormReceipt + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + comboBoxProduct = new ComboBox(); + label1 = new Label(); + label2 = new Label(); + label3 = new Label(); + label4 = new Label(); + numericUpDownStorageNumber = new NumericUpDown(); + label5 = new Label(); + comboBoxStorageProductId = new ComboBox(); + numericUpDownStorageSize = new NumericUpDown(); + numericUpDownNumOfPairs = new NumericUpDown(); + buttonCancel = new Button(); + buttonSave = new Button(); + ((System.ComponentModel.ISupportInitialize)numericUpDownStorageNumber).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownStorageSize).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownNumOfPairs).BeginInit(); + SuspendLayout(); + // + // comboBoxProduct + // + comboBoxProduct.FormattingEnabled = true; + comboBoxProduct.Location = new Point(232, 33); + comboBoxProduct.Name = "comboBoxProduct"; + comboBoxProduct.Size = new Size(121, 23); + comboBoxProduct.TabIndex = 7; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(12, 36); + label1.Name = "label1"; + label1.Size = new Size(56, 15); + label1.TabIndex = 8; + label1.Text = "Продукт:"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(12, 135); + label2.Name = "label2"; + label2.Size = new Size(122, 15); + label2.TabIndex = 9; + label2.Text = "Номер поступления:"; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(12, 182); + label3.Name = "label3"; + label3.Size = new Size(169, 15); + label3.TabIndex = 10; + label3.Text = "Колиество поступивших пар:"; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(12, 237); + label4.Name = "label4"; + label4.Size = new Size(106, 15); + label4.TabIndex = 11; + label4.Text = "Размер на складе:"; + // + // numericUpDownStorageNumber + // + numericUpDownStorageNumber.Location = new Point(232, 135); + numericUpDownStorageNumber.Name = "numericUpDownStorageNumber"; + numericUpDownStorageNumber.Size = new Size(120, 23); + numericUpDownStorageNumber.TabIndex = 12; + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(12, 80); + label5.Name = "label5"; + label5.Size = new Size(112, 15); + label5.TabIndex = 13; + label5.Text = "Продукт на складе:"; + // + // comboBoxStorageProductId + // + comboBoxStorageProductId.FormattingEnabled = true; + comboBoxStorageProductId.Location = new Point(232, 80); + comboBoxStorageProductId.Name = "comboBoxStorageProductId"; + comboBoxStorageProductId.Size = new Size(121, 23); + comboBoxStorageProductId.TabIndex = 14; + // + // numericUpDownStorageSize + // + numericUpDownStorageSize.Location = new Point(232, 237); + numericUpDownStorageSize.Name = "numericUpDownStorageSize"; + numericUpDownStorageSize.Size = new Size(120, 23); + numericUpDownStorageSize.TabIndex = 15; + // + // numericUpDownNumOfPairs + // + numericUpDownNumOfPairs.Location = new Point(232, 182); + numericUpDownNumOfPairs.Name = "numericUpDownNumOfPairs"; + numericUpDownNumOfPairs.Size = new Size(120, 23); + numericUpDownNumOfPairs.TabIndex = 16; + // + // buttonCancel + // + buttonCancel.Location = new Point(244, 301); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(102, 23); + buttonCancel.TabIndex = 18; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += buttonCancel_Click; + // + // buttonSave + // + buttonSave.Location = new Point(44, 301); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(100, 23); + buttonSave.TabIndex = 17; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += buttonSave_Click; + // + // FormReceipt + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(398, 525); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(numericUpDownNumOfPairs); + Controls.Add(numericUpDownStorageSize); + Controls.Add(comboBoxStorageProductId); + Controls.Add(label5); + Controls.Add(numericUpDownStorageNumber); + Controls.Add(label4); + Controls.Add(label3); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(comboBoxProduct); + Name = "FormReceipt"; + Text = "FormReceipt"; + ((System.ComponentModel.ISupportInitialize)numericUpDownStorageNumber).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownStorageSize).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownNumOfPairs).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private ComboBox comboBoxProduct; + private Label label1; + private Label label2; + private Label label3; + private Label label4; + private NumericUpDown numericUpDownStorageNumber; + private Label label5; + private ComboBox comboBoxStorageProductId; + private NumericUpDown numericUpDownStorageSize; + private NumericUpDown numericUpDownNumOfPairs; + private Button buttonCancel; + private Button buttonSave; + } +} \ No newline at end of file diff --git a/ShoeStore/Forms/FormReceipt.cs b/ShoeStore/Forms/FormReceipt.cs new file mode 100644 index 0000000..ac17d34 --- /dev/null +++ b/ShoeStore/Forms/FormReceipt.cs @@ -0,0 +1,53 @@ +using ShoeStore.Entities; +using ShoeStore.Repositories; +using ShoeStore.Repositories.Implementations; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ShoeStore.Froms +{ + public partial class FormReceipt : Form + { + private readonly IReceiptRepository _receiptRepository; + //private int? _receiptId; + + + public FormReceipt() + { + InitializeComponent(); + } + + private void buttonSave_Click(object sender, EventArgs e) + { + try + { + if (comboBoxProduct.SelectedIndex < 0 || + comboBoxStorageProductId.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненные поля"); + } + _receiptRepository.CreateReceipt(Receipt.CreateOperation( + 0, (int)comboBoxProduct.SelectedValue!, + (int)comboBoxStorageProductId.SelectedValue!, + Convert.ToInt32(numericUpDownStorageNumber.Value), Convert.ToInt32(numericUpDownStorageSize.Value), + Convert.ToInt32(numericUpDownNumOfPairs.Value))); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonCancel_Click(object sender, EventArgs e) => +Close(); + } +} diff --git a/ShoeStore/Forms/FormReceipt.resx b/ShoeStore/Forms/FormReceipt.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ShoeStore/Forms/FormReceipt.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ShoeStore/Forms/FormReceipts.Designer.cs b/ShoeStore/Forms/FormReceipts.Designer.cs new file mode 100644 index 0000000..e202ec0 --- /dev/null +++ b/ShoeStore/Forms/FormReceipts.Designer.cs @@ -0,0 +1,90 @@ +namespace ShoeStore.Froms +{ + partial class FormReceipts + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + dataGridView1 = new DataGridView(); + panel1 = new Panel(); + buttonAdd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // dataGridView1 + // + dataGridView1.AllowUserToAddRows = false; + dataGridView1.AllowUserToDeleteRows = false; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(0, 0); + dataGridView1.Name = "dataGridView1"; + dataGridView1.ReadOnly = true; + dataGridView1.Size = new Size(800, 450); + dataGridView1.TabIndex = 0; + // + // panel1 + // + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(644, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(156, 450); + panel1.TabIndex = 1; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.плюс; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(34, 24); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(98, 86); + buttonAdd.TabIndex = 1; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // FormReceipts + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(panel1); + Controls.Add(dataGridView1); + Name = "FormReceipts"; + Text = "FormReceipts"; + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + panel1.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridView1; + private Panel panel1; + private Button buttonAdd; + } +} \ No newline at end of file diff --git a/ShoeStore/Forms/FormReceipts.cs b/ShoeStore/Forms/FormReceipts.cs new file mode 100644 index 0000000..4d002b8 --- /dev/null +++ b/ShoeStore/Forms/FormReceipts.cs @@ -0,0 +1,42 @@ +using ShoeStore.Repositories; +using ShoeStore.Repositories.Implementations; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Xml.Linq; +using Unity; + +namespace ShoeStore.Froms; +public partial class FormReceipts : Form +{ + private readonly IUnityContainer _container; + private readonly IReceiptRepository _receiptRepository; + public FormReceipts(IUnityContainer container, IReceiptRepository receiptRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _receiptRepository = receiptRepository; + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView1.DataSource = _receiptRepository.ReadReceipts(); +} diff --git a/ShoeStore/Forms/FormReceipts.resx b/ShoeStore/Forms/FormReceipts.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ShoeStore/Forms/FormReceipts.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ShoeStore/Forms/FormSale.Designer.cs b/ShoeStore/Forms/FormSale.Designer.cs new file mode 100644 index 0000000..d36c18f --- /dev/null +++ b/ShoeStore/Forms/FormSale.Designer.cs @@ -0,0 +1,193 @@ +namespace ShoeStore.Froms +{ + partial class FormSale + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + label1 = new Label(); + label2 = new Label(); + label4 = new Label(); + label5 = new Label(); + comboBoxProduct = new ComboBox(); + comboBoxStorageProductId = new ComboBox(); + numericUpDownStorageNumber = new NumericUpDown(); + numericUpDownStorageSize = new NumericUpDown(); + buttonSave = new Button(); + buttonCancel = new Button(); + dataGridView1 = new DataGridView(); + panel1 = new Panel(); + ((System.ComponentModel.ISupportInitialize)numericUpDownStorageNumber).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownStorageSize).BeginInit(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(38, 37); + label1.Name = "label1"; + label1.Size = new Size(56, 15); + label1.TabIndex = 0; + label1.Text = "Продукт:"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(38, 75); + label2.Name = "label2"; + label2.Size = new Size(112, 15); + label2.TabIndex = 1; + label2.Text = "Продукт на складе:"; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(38, 128); + label4.Name = "label4"; + label4.Size = new Size(100, 15); + label4.TabIndex = 3; + label4.Text = "Номер продажи:"; + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(38, 173); + label5.Name = "label5"; + label5.Size = new Size(106, 15); + label5.TabIndex = 4; + label5.Text = "Размер на складе:"; + // + // comboBoxProduct + // + comboBoxProduct.FormattingEnabled = true; + comboBoxProduct.Location = new Point(206, 34); + comboBoxProduct.Name = "comboBoxProduct"; + comboBoxProduct.Size = new Size(121, 23); + comboBoxProduct.TabIndex = 6; + // + // comboBoxStorageProductId + // + comboBoxStorageProductId.FormattingEnabled = true; + comboBoxStorageProductId.Location = new Point(206, 75); + comboBoxStorageProductId.Name = "comboBoxStorageProductId"; + comboBoxStorageProductId.Size = new Size(121, 23); + comboBoxStorageProductId.TabIndex = 7; + // + // numericUpDownStorageNumber + // + numericUpDownStorageNumber.Location = new Point(207, 126); + numericUpDownStorageNumber.Name = "numericUpDownStorageNumber"; + numericUpDownStorageNumber.Size = new Size(120, 23); + numericUpDownStorageNumber.TabIndex = 9; + // + // numericUpDownStorageSize + // + numericUpDownStorageSize.Location = new Point(207, 171); + numericUpDownStorageSize.Name = "numericUpDownStorageSize"; + numericUpDownStorageSize.Size = new Size(120, 23); + numericUpDownStorageSize.TabIndex = 10; + // + // buttonSave + // + buttonSave.Location = new Point(25, 455); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(100, 23); + buttonSave.TabIndex = 11; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click_1; + // + // buttonCancel + // + buttonCancel.Location = new Point(225, 455); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(102, 23); + buttonCancel.TabIndex = 12; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click_1; + // + // dataGridView1 + // + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(0, 0); + dataGridView1.Name = "dataGridView1"; + dataGridView1.Size = new Size(289, 249); + dataGridView1.TabIndex = 13; + // + // panel1 + // + panel1.Controls.Add(dataGridView1); + panel1.Location = new Point(38, 200); + panel1.Name = "panel1"; + panel1.Size = new Size(289, 249); + panel1.TabIndex = 14; + // + // FormSale + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(377, 497); + Controls.Add(panel1); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(numericUpDownStorageSize); + Controls.Add(numericUpDownStorageNumber); + Controls.Add(comboBoxStorageProductId); + Controls.Add(comboBoxProduct); + Controls.Add(label5); + Controls.Add(label4); + Controls.Add(label2); + Controls.Add(label1); + Name = "FormSale"; + Text = "FormSale"; + ((System.ComponentModel.ISupportInitialize)numericUpDownStorageNumber).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownStorageSize).EndInit(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + panel1.ResumeLayout(false); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label label1; + private Label label2; + private Label label4; + private Label label5; + private ComboBox comboBoxProduct; + private ComboBox comboBoxStorageProductId; + private NumericUpDown numericUpDownStorageNumber; + private NumericUpDown numericUpDownStorageSize; + private Button buttonSave; + private Button buttonCancel; + private DataGridView dataGridView1; + private Panel panel1; + } +} \ No newline at end of file diff --git a/ShoeStore/Forms/FormSale.cs b/ShoeStore/Forms/FormSale.cs new file mode 100644 index 0000000..01f732f --- /dev/null +++ b/ShoeStore/Forms/FormSale.cs @@ -0,0 +1,58 @@ +using ShoeStore.Entities; +using ShoeStore.Repositories; +using ShoeStore.Repositories.Implementations; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ShoeStore.Froms; + +public partial class FormSale : Form +{ + ISaleRepository _saleRepository; + + public FormSale(ISaleRepository saleRepository, IProductRepository productRepository) + { + InitializeComponent(); + _saleRepository = saleRepository ?? throw new ArgumentNullException(nameof(saleRepository)); + + comboBoxProduct.DataSource = productRepository.ReadProducts(); + comboBoxProduct.DisplayMember = "NameOfShoes"; + comboBoxProduct.ValueMember = "Id"; + + //? + } + + private void ButtonSave_Click_1(object sender, EventArgs e) + { + try + { + if (comboBoxProduct.SelectedIndex < 0 || + comboBoxStorageProductId.SelectedIndex < 0 || + comboBoxProduct.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненные поля"); + } + _saleRepository.CreateSale(Sale.CreateOperation( + 0, + (int)comboBoxProduct.SelectedValue!, + (int)comboBoxProduct.SelectedValue!, + Convert.ToInt32(numericUpDownStorageNumber.Value), Convert.ToInt32(numericUpDownStorageSize.Value))); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click_1(object sender, EventArgs e) => +Close(); +} \ No newline at end of file diff --git a/ShoeStore/Forms/FormSale.resx b/ShoeStore/Forms/FormSale.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ShoeStore/Forms/FormSale.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ShoeStore/Forms/FormSales.Designer.cs b/ShoeStore/Forms/FormSales.Designer.cs new file mode 100644 index 0000000..a378be9 --- /dev/null +++ b/ShoeStore/Forms/FormSales.Designer.cs @@ -0,0 +1,106 @@ +namespace ShoeStore.Froms +{ + partial class FormSales + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + dataGridView1 = new DataGridView(); + panel1 = new Panel(); + buttonDel = new Button(); + buttonAdd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // dataGridView1 + // + dataGridView1.AllowUserToAddRows = false; + dataGridView1.AllowUserToDeleteRows = false; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(0, 0); + dataGridView1.Name = "dataGridView1"; + dataGridView1.ReadOnly = true; + dataGridView1.Size = new Size(800, 450); + dataGridView1.TabIndex = 0; + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(649, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(151, 450); + panel1.TabIndex = 1; + // + // buttonDel + // + buttonDel.BackColor = SystemColors.ControlLightLight; + buttonDel.BackgroundImage = Properties.Resources.минус; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(28, 156); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(98, 86); + buttonDel.TabIndex = 3; + buttonDel.UseVisualStyleBackColor = false; + buttonDel.Click += buttonDel_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.плюс; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(28, 30); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(98, 86); + buttonAdd.TabIndex = 1; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // FormSales + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(panel1); + Controls.Add(dataGridView1); + Name = "FormSales"; + Text = "FormSales"; + Load += FormSales_Load; + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + panel1.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridView1; + private Panel panel1; + private Button buttonAdd; + private Button buttonDel; + } +} \ No newline at end of file diff --git a/ShoeStore/Forms/FormSales.cs b/ShoeStore/Forms/FormSales.cs new file mode 100644 index 0000000..79f4477 --- /dev/null +++ b/ShoeStore/Forms/FormSales.cs @@ -0,0 +1,90 @@ +using ShoeStore.Repositories; +using ShoeStore.Repositories.Implementations; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace ShoeStore.Froms +{ + public partial class FormSales : Form + { + private readonly IUnityContainer _container; + private readonly ISaleRepository _saleRepository; + + public FormSales(IUnityContainer container, ISaleRepository saleRepository) + { + InitializeComponent(); + _container = container; + _saleRepository = saleRepository; + } + + private void FormSales_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + public void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void LoadList() => dataGridView1.DataSource = _saleRepository.ReadSales(); + + private void buttonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _saleRepository.DeleteSale(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView1.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = + Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} diff --git a/ShoeStore/Forms/FormSales.resx b/ShoeStore/Forms/FormSales.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ShoeStore/Forms/FormSales.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ShoeStore/Forms/FormStorage.Designer.cs b/ShoeStore/Forms/FormStorage.Designer.cs new file mode 100644 index 0000000..e92953a --- /dev/null +++ b/ShoeStore/Forms/FormStorage.Designer.cs @@ -0,0 +1,145 @@ +namespace ShoeStore.Forms +{ + partial class FormStorage + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + buttonCancel = new Button(); + buttonSave = new Button(); + numericUpDownNumStorage = new NumericUpDown(); + label3 = new Label(); + label2 = new Label(); + label1 = new Label(); + numericUpDownSize = new NumericUpDown(); + comboBoxNalStorage = new ComboBox(); + ((System.ComponentModel.ISupportInitialize)numericUpDownNumStorage).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownSize).BeginInit(); + SuspendLayout(); + // + // buttonCancel + // + buttonCancel.Location = new Point(209, 252); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(106, 23); + buttonCancel.TabIndex = 15; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += buttonCancel_Click; + // + // buttonSave + // + buttonSave.Location = new Point(44, 252); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(106, 23); + buttonSave.TabIndex = 14; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += buttonSave_Click; + // + // numericUpDownNumStorage + // + numericUpDownNumStorage.Location = new Point(183, 108); + numericUpDownNumStorage.Name = "numericUpDownNumStorage"; + numericUpDownNumStorage.Size = new Size(132, 23); + numericUpDownNumStorage.TabIndex = 12; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(44, 179); + label3.Name = "label3"; + label3.Size = new Size(108, 15); + label3.TabIndex = 11; + label3.Text = "Налиие на складе:"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(44, 116); + label2.Name = "label2"; + label2.Size = new Size(88, 15); + label2.TabIndex = 10; + label2.Text = "Номер склада:"; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(44, 48); + label1.Name = "label1"; + label1.Size = new Size(50, 15); + label1.TabIndex = 9; + label1.Text = "Размер:"; + // + // numericUpDownSize + // + numericUpDownSize.Location = new Point(183, 48); + numericUpDownSize.Name = "numericUpDownSize"; + numericUpDownSize.Size = new Size(132, 23); + numericUpDownSize.TabIndex = 16; + // + // comboBoxNalStorage + // + comboBoxNalStorage.FormattingEnabled = true; + comboBoxNalStorage.Location = new Point(183, 176); + comboBoxNalStorage.Name = "comboBoxNalStorage"; + comboBoxNalStorage.Size = new Size(121, 23); + comboBoxNalStorage.TabIndex = 17; + // + // FormStorage + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(355, 421); + Controls.Add(comboBoxNalStorage); + Controls.Add(numericUpDownSize); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(numericUpDownNumStorage); + Controls.Add(label3); + Controls.Add(label2); + Controls.Add(label1); + Name = "FormStorage"; + Text = "FormStorage"; + ((System.ComponentModel.ISupportInitialize)numericUpDownNumStorage).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownSize).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Button buttonCancel; + private Button buttonSave; + private NumericUpDown numericUpDownStorageSize; + private NumericUpDown numericUpDownNumStorage; + private Label label3; + private Label label2; + private Label label1; + private NumericUpDown numericUpDownSize; + private ComboBox comboBoxNalStorage; + } +} \ No newline at end of file diff --git a/ShoeStore/Forms/FormStorage.cs b/ShoeStore/Forms/FormStorage.cs new file mode 100644 index 0000000..112e552 --- /dev/null +++ b/ShoeStore/Forms/FormStorage.cs @@ -0,0 +1,89 @@ +using ShoeStore.Entities; +using ShoeStore.Entities.Enums; +using ShoeStore.Repositories; +using ShoeStore.Repositories.Implementations; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ShoeStore.Forms +{ + public partial class FormStorage : Form + { + private readonly IStorageRepository _storageRepository; + + private int? _productId; + public int Id + { + set + { + try + { + var storage = _storageRepository.ReadStorageById(value); + + if (storage == null) + { + throw new InvalidDataException(nameof(storage)); + } + + /*foreach (ManufacturingCompany company in Enum.GetValues(typeof(ManufacturingCompany))) + { + if ((company & storage.ManufacturingCompany) != 0) + { + checkedListBoxManufactoringCompany.SetItemChecked( + checkedListBoxManufactoringCompany.Items.IndexOf(company), true); + } + }*/ + + numericUpDownSize.Value = storage.Size; + comboBoxNalStorage.SelectedItem = storage.QuantityInStock; + numericUpDownNumStorage.Value = storage.NumberStorage; + + _productId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FormStorage() + { + InitializeComponent(); + } + + private void buttonSave_Click(object sender, EventArgs e) + { + try + { + if ( + comboBoxNalStorage.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненные поля"); + } + _storageRepository.CreateStorage(Storage.CreateEntity( + (int)comboBoxNalStorage.SelectedValue!, + + Convert.ToInt32(numericUpDownSize.Value), + Convert.ToInt32(numericUpDownNumStorage.Value))); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonCancel_Click(object sender, EventArgs e) => Close(); + + } +} diff --git a/ShoeStore/Forms/FormStorage.resx b/ShoeStore/Forms/FormStorage.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ShoeStore/Forms/FormStorage.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ShoeStore/Forms/FormStorages.Designer.cs b/ShoeStore/Forms/FormStorages.Designer.cs new file mode 100644 index 0000000..e4f7754 --- /dev/null +++ b/ShoeStore/Forms/FormStorages.Designer.cs @@ -0,0 +1,117 @@ +namespace ShoeStore.Forms +{ + partial class FormStorages + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel1 = new Panel(); + buttonDel = new Button(); + buttonUpd = new Button(); + buttonAdd = new Button(); + dataGridViewStorages = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewStorages).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonUpd); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(600, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(200, 450); + panel1.TabIndex = 0; + // + // buttonDel + // + buttonDel.BackColor = SystemColors.ControlLightLight; + buttonDel.BackgroundImage = Properties.Resources.минус; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(48, 256); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(98, 86); + buttonDel.TabIndex = 8; + buttonDel.UseVisualStyleBackColor = false; + buttonDel.Click += buttonDel_Click; + // + // buttonUpd + // + buttonUpd.BackColor = SystemColors.ControlLightLight; + buttonUpd.BackgroundImage = Properties.Resources.карандащ; + buttonUpd.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpd.Location = new Point(48, 155); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(98, 86); + buttonUpd.TabIndex = 7; + buttonUpd.UseVisualStyleBackColor = false; + buttonUpd.Click += buttonUpd_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.плюс; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(48, 54); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(98, 86); + buttonAdd.TabIndex = 6; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += buttonAdd_Click; + // + // dataGridViewStorages + // + dataGridViewStorages.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewStorages.Dock = DockStyle.Fill; + dataGridViewStorages.Location = new Point(0, 0); + dataGridViewStorages.Name = "dataGridViewStorages"; + dataGridViewStorages.Size = new Size(600, 450); + dataGridViewStorages.TabIndex = 1; + // + // FormStorages + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(dataGridViewStorages); + Controls.Add(panel1); + Name = "FormStorages"; + Text = "FormStorages"; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewStorages).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private DataGridView dataGridViewStorages; + private Button buttonDel; + private Button buttonUpd; + private Button buttonAdd; + } +} \ No newline at end of file diff --git a/ShoeStore/Forms/FormStorages.cs b/ShoeStore/Forms/FormStorages.cs new file mode 100644 index 0000000..5851267 --- /dev/null +++ b/ShoeStore/Forms/FormStorages.cs @@ -0,0 +1,99 @@ +using ShoeStore.Repositories; +using Unity; + +namespace ShoeStore.Forms +{ + public partial class FormStorages : Form + { + private readonly IUnityContainer _container; + private readonly IStorageRepository _storageRepository; + + public FormStorages(IUnityContainer container, IStorageRepository storageRepository) + { + InitializeComponent(); + _container = container; + _storageRepository = storageRepository; + } + + private void FormEmployees_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _storageRepository.DeleteStorage(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void LoadList() => dataGridViewStorages.DataSource = _storageRepository.ReadStorages(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridViewStorages.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = + Convert.ToInt32(dataGridViewStorages.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} diff --git a/ShoeStore/Forms/FormStorages.resx b/ShoeStore/Forms/FormStorages.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ShoeStore/Forms/FormStorages.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ShoeStore/Program.cs b/ShoeStore/Program.cs index 408d118..1ce295a 100644 --- a/ShoeStore/Program.cs +++ b/ShoeStore/Program.cs @@ -1,3 +1,8 @@ +using ShoeStore.Repositories.Implementations; +using ShoeStore.Repositories; +using Unity.Lifetime; +using Unity; + namespace ShoeStore { internal static class Program @@ -11,7 +16,18 @@ namespace ShoeStore // 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()); + } + + private static IUnityContainer CreateContainer() + { + var container = new UnityContainer(); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + return container; } } } \ No newline at end of file diff --git a/ShoeStore/Properties/Resources.Designer.cs b/ShoeStore/Properties/Resources.Designer.cs new file mode 100644 index 0000000..9f1dd31 --- /dev/null +++ b/ShoeStore/Properties/Resources.Designer.cs @@ -0,0 +1,113 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace ShoeStore.Properties { + using System; + + + /// + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// + // Этот класс создан автоматически классом 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() { + } + + /// + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// + [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("ShoeStore.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap карандащ { + get { + object obj = ResourceManager.GetObject("карандащ", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap минус { + get { + object obj = ResourceManager.GetObject("минус", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap обувной { + get { + object obj = ResourceManager.GetObject("обувной", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap плюс { + get { + object obj = ResourceManager.GetObject("плюс", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap плюс1 { + get { + object obj = ResourceManager.GetObject("плюс1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/ShoeStore/Properties/Resources.resx b/ShoeStore/Properties/Resources.resx new file mode 100644 index 0000000..ed6050e --- /dev/null +++ b/ShoeStore/Properties/Resources.resx @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\плюс.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\плюс1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\карандащ.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\минус.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\обувной.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/ShoeStore/Repositories/IProductRepository.cs b/ShoeStore/Repositories/IProductRepository.cs index 1f18cf9..9a352c0 100644 --- a/ShoeStore/Repositories/IProductRepository.cs +++ b/ShoeStore/Repositories/IProductRepository.cs @@ -10,7 +10,7 @@ namespace ShoeStore.Repositories; public interface IProductRepository { IEnumerable ReadProducts(); - Employee ReadProductById(int id); + Product ReadProductById(int id); void CreateProduct(Product product); void UpdateProduct(Product product); void DeleteProduct(int id); diff --git a/ShoeStore/Repositories/ISaleRepository.cs b/ShoeStore/Repositories/ISaleRepository.cs index bdc1f8b..2a2b8eb 100644 --- a/ShoeStore/Repositories/ISaleRepository.cs +++ b/ShoeStore/Repositories/ISaleRepository.cs @@ -11,6 +11,6 @@ public interface ISaleRepository { IEnumerable ReadSales(DateTime? dateForm = null, DateTime? dateTo = null, int? productId = null, int? storageSize = null); void CreateSale(Sale sale); - void DeleteSale(Sale sale); + void DeleteSale(int id); } diff --git a/ShoeStore/Repositories/Implementations/EmployeeRepository.cs b/ShoeStore/Repositories/Implementations/EmployeeRepository.cs new file mode 100644 index 0000000..d2e94bf --- /dev/null +++ b/ShoeStore/Repositories/Implementations/EmployeeRepository.cs @@ -0,0 +1,33 @@ +using ShoeStore.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ShoeStore.Repositories.Implementations; + +public class EmployeeRepository : IEmployeeRepository +{ + public void CreateEmployee(Employee employee) + { + } + + public void DeleteEmployee(int id) + { + } + + public Employee ReadEmployeeById(int id) + { + return Employee.CreateEntity(0, 0, 0); + } + + public IEnumerable ReadEmployees() + { + return []; + } + + public void UpdateEmployee(Employee employee) + { + } +} diff --git a/ShoeStore/Repositories/Implementations/ProductRepository.cs b/ShoeStore/Repositories/Implementations/ProductRepository.cs new file mode 100644 index 0000000..42604e4 --- /dev/null +++ b/ShoeStore/Repositories/Implementations/ProductRepository.cs @@ -0,0 +1,35 @@ +using ShoeStore.Entities; +using ShoeStore.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ShoeStore.Repositories.Implementations; + +public class ProductRepository : IProductRepository +{ + public void CreateProduct(Product product) + { + } + + public void DeleteProduct(int id) + { + } + + public Product ReadProductById(int id) + { + return Product.CreateEntity(0, 0, String.Empty, ManufacturingCompany.None, 0, ProductType.None, 0); + } + + public IEnumerable ReadProducts() + { + return []; + } + + + public void UpdateProduct(Product product) + { + } +} diff --git a/ShoeStore/Repositories/Implementations/ReceiptRepository.cs b/ShoeStore/Repositories/Implementations/ReceiptRepository.cs new file mode 100644 index 0000000..69890fe --- /dev/null +++ b/ShoeStore/Repositories/Implementations/ReceiptRepository.cs @@ -0,0 +1,20 @@ +using ShoeStore.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ShoeStore.Repositories.Implementations; + +public class ReceiptRepository : IReceiptRepository +{ + public void CreateReceipt(Receipt receipt) + { + } + + public IEnumerable ReadReceipts(DateTime? dateForm = null, DateTime? dateTo = null, int? storageProductId = null, int? storageSize = null) + { + return []; + } +} diff --git a/ShoeStore/Repositories/Implementations/SaleRepository.cs b/ShoeStore/Repositories/Implementations/SaleRepository.cs new file mode 100644 index 0000000..a610d18 --- /dev/null +++ b/ShoeStore/Repositories/Implementations/SaleRepository.cs @@ -0,0 +1,24 @@ +using ShoeStore.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ShoeStore.Repositories.Implementations; + +public class SaleRepository : ISaleRepository +{ + public void CreateSale(Sale sale) + { + } + + public void DeleteSale(int id) + { + } + + public IEnumerable ReadSales(DateTime? dateForm = null, DateTime? dateTo = null, int? productId = null, int? storageSize = null) + { + return []; + } +} diff --git a/ShoeStore/Repositories/Implementations/StorageRepository.cs b/ShoeStore/Repositories/Implementations/StorageRepository.cs new file mode 100644 index 0000000..a052901 --- /dev/null +++ b/ShoeStore/Repositories/Implementations/StorageRepository.cs @@ -0,0 +1,33 @@ +using ShoeStore.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ShoeStore.Repositories.Implementations; + +public class StorageRepository : IStorageRepository +{ + public void CreateStorage(Storage storage) + { + } + + public void DeleteStorage(int id) + { + } + + public Storage ReadStorageById(int id) + { + return Storage.CreateEntity(0, 0, 0); + } + + public IEnumerable ReadStorages() + { + return []; + } + + public void UpdateStorage(Storage storage) + { + } +} diff --git a/ShoeStore/Resources/карандащ.png b/ShoeStore/Resources/карандащ.png new file mode 100644 index 0000000000000000000000000000000000000000..14175b5e6a80d3c271ae8f8a2597f5ce951db2a2 GIT binary patch literal 12138 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 ZOQ3|iW1uzZ4~zl;riSJQ1qU3j{U1kA2!;Rv literal 0 HcmV?d00001 diff --git a/ShoeStore/Resources/минус.png b/ShoeStore/Resources/минус.png new file mode 100644 index 0000000000000000000000000000000000000000..4ffeee1fed058a696b4ac289369a838a6e8f0e64 GIT binary patch literal 230005 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%0DqQ?DL< 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