From 699bc69f4895a65f83807aa679395b68121857fa Mon Sep 17 00:00:00 2001 From: MariaBelkina <89656988623@mail.ru> Date: Mon, 9 Dec 2024 11:55:34 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=B0=201=20=D1=81=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Entities/Agent.cs | 30 +++ .../Entities/Contract.cs | 32 +++ .../Entities/DelegateToAgents.cs | 31 +++ .../Entities/Enums/Category.cs | 18 ++ .../Entities/Enums/Qualification.cs | 15 ++ .../Entities/Enums/Unit.cs | 14 ++ .../Entities/Product.cs | 37 ++++ .../Entities/ProductSales.cs | 26 +++ .../Entities/PurchasingCompany.cs | 23 ++ .../Form1.Designer.cs | 39 ---- .../TradeAndProcurementEnterprice/Form1.cs | 10 - .../FormEnterprice.Designer.cs | 140 ++++++++++++ .../FormEnterprice.cs | 82 +++++++ .../FormEnterprice.resx | 123 +++++++++++ .../Forms/FormAgent.Designer.cs | 158 ++++++++++++++ .../Forms/FormAgent.cs | 108 ++++++++++ .../{Form1.resx => Forms/FormAgent.resx} | 54 ++--- .../Forms/FormAgents.Designer.cs | 134 ++++++++++++ .../Forms/FormAgents.cs | 115 ++++++++++ .../Forms/FormAgents.resx | 120 +++++++++++ .../Forms/FormContract.Designer.cs | 189 +++++++++++++++++ .../Forms/FormContract.cs | 75 +++++++ .../Forms/FormContract.resx | 126 +++++++++++ .../Forms/FormContracts.Designer.cs | 104 +++++++++ .../Forms/FormContracts.cs | 58 +++++ .../Forms/FormContracts.resx | 120 +++++++++++ .../Forms/FormDelegateToAgent.Designer.cs | 160 ++++++++++++++ .../Forms/FormDelegateToAgent.cs | 56 +++++ .../Forms/FormDelegateToAgent.resx | 120 +++++++++++ .../Forms/FormDelegatesToAgents.Designer.cs | 104 +++++++++ .../Forms/FormDelegatesToAgents.cs | 56 +++++ .../Forms/FormDelegatesToAgents.resx | 120 +++++++++++ .../Forms/FormProduct.Designer.cs | 200 ++++++++++++++++++ .../Forms/FormProduct.cs | 92 ++++++++ .../Forms/FormProduct.resx | 120 +++++++++++ .../Forms/FormProducts.Designer.cs | 134 ++++++++++++ .../Forms/FormProducts.cs | 113 ++++++++++ .../Forms/FormProducts.resx | 120 +++++++++++ .../Forms/FormPurchasingCompanies.Designer.cs | 134 ++++++++++++ .../Forms/FormPurchasingCompanies.cs | 115 ++++++++++ .../Forms/FormPurchasingCompanies.resx | 120 +++++++++++ .../Forms/FormPurchasingCompany.Designer.cs | 104 +++++++++ .../Forms/FormPurchasingCompany.cs | 84 ++++++++ .../Forms/FormPurchasingCompany.resx | 120 +++++++++++ .../TradeAndProcurementEnterprice/Program.cs | 20 +- .../Properties/Resources.Designer.cs | 103 +++++++++ .../Properties/Resources.resx | 133 ++++++++++++ .../Repositories/IAgentsRepository.cs | 21 ++ .../Repositories/IContractRepository.cs | 16 ++ .../IDelegateToAgentRepository.cs | 16 ++ .../Repositories/IProductRepository.cs | 21 ++ .../IPurchasingCompanyRepository.cs | 21 ++ .../Implementations/AgentsRepository.cs | 33 +++ .../Implementations/ContractRepository.cs | 20 ++ .../DelegateToAgentRepository.cs | 20 ++ .../Implementations/ProductRepository.cs | 33 +++ .../PurchasingCompanyRepository.cs | 33 +++ .../Resources/add.png | Bin 0 -> 15981 bytes .../Resources/edit.png | Bin 0 -> 20760 bytes .../Resources/photo_2024-12-03_21-34-38.jpg | Bin 0 -> 39443 bytes .../Resources/remove.png | Bin 0 -> 12343 bytes .../TradeAndProcurementEnterprice.csproj | 20 ++ 62 files changed, 4486 insertions(+), 77 deletions(-) create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Agent.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Contract.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/DelegateToAgents.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Enums/Category.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Enums/Qualification.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Enums/Unit.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Product.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/ProductSales.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/PurchasingCompany.cs delete mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Form1.Designer.cs delete mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Form1.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/FormEnterprice.Designer.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/FormEnterprice.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/FormEnterprice.resx create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgent.Designer.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgent.cs rename TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/{Form1.resx => Forms/FormAgent.resx} (92%) create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgents.Designer.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgents.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgents.resx create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContract.Designer.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContract.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContract.resx create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContracts.Designer.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContracts.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContracts.resx create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegateToAgent.Designer.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegateToAgent.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegateToAgent.resx create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegatesToAgents.Designer.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegatesToAgents.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegatesToAgents.resx create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProduct.Designer.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProduct.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProduct.resx create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProducts.Designer.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProducts.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProducts.resx create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompanies.Designer.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompanies.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompanies.resx create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompany.Designer.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompany.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompany.resx create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Properties/Resources.Designer.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Properties/Resources.resx create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IAgentsRepository.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IContractRepository.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IDelegateToAgentRepository.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IProductRepository.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IPurchasingCompanyRepository.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/AgentsRepository.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/ContractRepository.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/DelegateToAgentRepository.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/ProductRepository.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/PurchasingCompanyRepository.cs create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Resources/add.png create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Resources/edit.png create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Resources/photo_2024-12-03_21-34-38.jpg create mode 100644 TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Resources/remove.png diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Agent.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Agent.cs new file mode 100644 index 0000000..470a1c0 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Agent.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TradeAndProcurementEnterprice.Entities.Enums; + +namespace TradeAndProcurementEnterprice.Entities; + +public class Agent +{ + public int Id { get; private set; } + + public string Name { get; private set; } = string.Empty; + + public Qualification Qualification { get; private set; } + + public Category Category { get; private set; } + + public static Agent CreateEntity(int id, string name, Qualification qualification, Category category) + { + return new Agent + { + Id = id, + Name = name ?? string.Empty, + Qualification = qualification, + Category = category + }; + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Contract.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Contract.cs new file mode 100644 index 0000000..e6d4c35 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Contract.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TradeAndProcurementEnterprice.Entities; + +public class Contract +{ + public int ContractID { get; private set; } + + public DateTime SaleTime { get; private set; } + + public int PurchasingCompanyID { get; private set; } + + public int AgentsID { get; private set; } + + public IEnumerable ProductSales { get; private set; } = []; + + public static Contract CreateOperation(int contractID, int purchasingCompanyID, int agentsID, IEnumerable productSales) + { + return new Contract + { + ContractID = contractID, + SaleTime = DateTime.Now, + PurchasingCompanyID = purchasingCompanyID, + AgentsID = agentsID, + ProductSales = productSales + }; + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/DelegateToAgents.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/DelegateToAgents.cs new file mode 100644 index 0000000..20562f9 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/DelegateToAgents.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TradeAndProcurementEnterprice.Entities; + +public class DelegateToAgents +{ + public int Id { get; private set; } + public int ProductArticle { get; private set; } + + public int AgentsID { get; private set; } + + public int Quantity { get; private set; } + + public DateTime Date { get; private set; } + + public static DelegateToAgents CreateOperation(int id, int productArticle, int agentsID, int quantity) + { + return new DelegateToAgents + { + Id = id, + ProductArticle = productArticle, + AgentsID = agentsID, + Date = DateTime.Now, + Quantity = quantity + }; + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Enums/Category.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Enums/Category.cs new file mode 100644 index 0000000..3e3ffd0 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Enums/Category.cs @@ -0,0 +1,18 @@ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TradeAndProcurementEnterprice.Entities.Enums; + +[Flags] +public enum Category +{ + None = 0, + Dairy = 1, + Groceries = 2, + Frozen = 4, + Other = 8 +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Enums/Qualification.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Enums/Qualification.cs new file mode 100644 index 0000000..74ab134 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Enums/Qualification.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TradeAndProcurementEnterprice.Entities.Enums; + +public enum Qualification +{ + None = 0, + Junior = 1, + Middle = 2, + Senior = 3 +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Enums/Unit.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Enums/Unit.cs new file mode 100644 index 0000000..ca16b6b --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Enums/Unit.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TradeAndProcurementEnterprice.Entities.Enums; + +public enum Unit +{ + Kilogram = 0, + Piece = 1, + Liter = 2 +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Product.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Product.cs new file mode 100644 index 0000000..95a080f --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/Product.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TradeAndProcurementEnterprice.Entities.Enums; + +namespace TradeAndProcurementEnterprice.Entities; + +public class Product +{ + public int Article { get; private set; } + + public string Nomenclature { get; private set; } = string.Empty; + + public decimal SellingPrice { get; private set; } + + public Unit Unit { get; private set; } + + public Category Category { get; private set; } + + public int InventoryQuantity { get; private set; } + + public static Product CreateEntity(int article, string nomenclature, decimal sellingPrice, Unit unit, + Category category, int inventoryQuantity) + { + return new Product + { + Article = article, + Nomenclature = nomenclature ?? string.Empty, + SellingPrice = sellingPrice, + Unit = unit, + Category = category, + InventoryQuantity = inventoryQuantity + }; + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/ProductSales.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/ProductSales.cs new file mode 100644 index 0000000..57e432c --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/ProductSales.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TradeAndProcurementEnterprice.Entities; + +public class ProductSales +{ + public int Id { get; private set; } + + public int ProductArticle { get; private set; } + + public int ProductQuantity { get; private set; } + + public static ProductSales CreateElement(int id, int prodictArticle, int productQuantity) + { + return new ProductSales + { + Id = id, + ProductArticle = prodictArticle, + ProductQuantity = productQuantity + }; + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/PurchasingCompany.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/PurchasingCompany.cs new file mode 100644 index 0000000..cf203e5 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Entities/PurchasingCompany.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TradeAndProcurementEnterprice.Entities; + +public class PurchasingCompany +{ + public int Id { get; private set; } + + public string Name { get; private set; } = string.Empty; + + public static PurchasingCompany CreateEntity(int id, string name) + { + return new PurchasingCompany + { + Id = id, + Name = name + }; + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Form1.Designer.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Form1.Designer.cs deleted file mode 100644 index 53a1524..0000000 --- a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace TradeAndProcurementEnterprice -{ - partial class Form1 - { - /// - /// 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() - { - this.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "Form1"; - } - - #endregion - } -} \ No newline at end of file diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Form1.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Form1.cs deleted file mode 100644 index c7e4439..0000000 --- a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace TradeAndProcurementEnterprice -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} \ No newline at end of file diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/FormEnterprice.Designer.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/FormEnterprice.Designer.cs new file mode 100644 index 0000000..2eb19f2 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/FormEnterprice.Designer.cs @@ -0,0 +1,140 @@ +namespace TradeAndProcurementEnterprice +{ + partial class FormEnterprice + { + /// + /// 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() + { + menuStrip1 = new MenuStrip(); + catalogToolStripMenuItem = new ToolStripMenuItem(); + agentsToolStripMenuItem = new ToolStripMenuItem(); + nomenclatureToolStripMenuItem = new ToolStripMenuItem(); + purchasingCompanyToolStripMenuItem = new ToolStripMenuItem(); + operationToolStripMenuItem = new ToolStripMenuItem(); + contractsToolStripMenuItem1 = new ToolStripMenuItem(); + delegateToAgentsToolStripMenuItem = new ToolStripMenuItem(); + reportToolStripMenuItem = new ToolStripMenuItem(); + menuStrip1.SuspendLayout(); + SuspendLayout(); + // + // menuStrip1 + // + menuStrip1.ImageScalingSize = new Size(32, 32); + menuStrip1.Items.AddRange(new ToolStripItem[] { catalogToolStripMenuItem, operationToolStripMenuItem, reportToolStripMenuItem }); + menuStrip1.Location = new Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Padding = new Padding(3, 1, 0, 1); + menuStrip1.Size = new Size(650, 24); + menuStrip1.TabIndex = 0; + menuStrip1.Text = "menuStrip1"; + // + // catalogToolStripMenuItem + // + catalogToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { agentsToolStripMenuItem, nomenclatureToolStripMenuItem, purchasingCompanyToolStripMenuItem }); + catalogToolStripMenuItem.Name = "catalogToolStripMenuItem"; + catalogToolStripMenuItem.Size = new Size(94, 22); + catalogToolStripMenuItem.Text = "Справочники"; + // + // agentsToolStripMenuItem + // + agentsToolStripMenuItem.Name = "agentsToolStripMenuItem"; + agentsToolStripMenuItem.Size = new Size(195, 22); + agentsToolStripMenuItem.Text = "Агенты-реализаторы"; + agentsToolStripMenuItem.Click += AgentsToolStripMenuItem_Click; + // + // nomenclatureToolStripMenuItem + // + nomenclatureToolStripMenuItem.Name = "nomenclatureToolStripMenuItem"; + nomenclatureToolStripMenuItem.Size = new Size(195, 22); + nomenclatureToolStripMenuItem.Text = "Номенклатура"; + nomenclatureToolStripMenuItem.Click += NomenclatureToolStripMenuItem_Click; + // + // purchasingCompanyToolStripMenuItem + // + purchasingCompanyToolStripMenuItem.Name = "purchasingCompanyToolStripMenuItem"; + purchasingCompanyToolStripMenuItem.Size = new Size(195, 22); + purchasingCompanyToolStripMenuItem.Text = "Компании закупщики"; + purchasingCompanyToolStripMenuItem.Click += PurchasingCompanyToolStripMenuItem_Click; + // + // operationToolStripMenuItem + // + operationToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { contractsToolStripMenuItem1, delegateToAgentsToolStripMenuItem }); + operationToolStripMenuItem.Name = "operationToolStripMenuItem"; + operationToolStripMenuItem.Size = new Size(75, 22); + operationToolStripMenuItem.Text = "Операции"; + // + // contractsToolStripMenuItem1 + // + contractsToolStripMenuItem1.Name = "contractsToolStripMenuItem1"; + contractsToolStripMenuItem1.Size = new Size(174, 22); + contractsToolStripMenuItem1.Text = "Продажи"; + contractsToolStripMenuItem1.Click += ContractsToolStripMenuItem1_Click; + // + // delegateToAgentsToolStripMenuItem + // + delegateToAgentsToolStripMenuItem.Name = "delegateToAgentsToolStripMenuItem"; + delegateToAgentsToolStripMenuItem.Size = new Size(174, 22); + delegateToAgentsToolStripMenuItem.Text = "Передача агентам"; + delegateToAgentsToolStripMenuItem.Click += DelegateToAgentsToolStripMenuItem_Click; + // + // reportToolStripMenuItem + // + reportToolStripMenuItem.Name = "reportToolStripMenuItem"; + reportToolStripMenuItem.Size = new Size(60, 22); + reportToolStripMenuItem.Text = "Отчёты"; + // + // FormEnterprice + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackgroundImage = Properties.Resources.photo_2024_12_03_21_34_38; + BackgroundImageLayout = ImageLayout.Stretch; + ClientSize = new Size(650, 339); + Controls.Add(menuStrip1); + MainMenuStrip = menuStrip1; + Margin = new Padding(2, 1, 2, 1); + Name = "FormEnterprice"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Торгово закупочное предприятие"; + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private MenuStrip menuStrip1; + private ToolStripMenuItem catalogToolStripMenuItem; + private ToolStripMenuItem agentsToolStripMenuItem; + private ToolStripMenuItem nomenclatureToolStripMenuItem; + private ToolStripMenuItem operationToolStripMenuItem; + private ToolStripMenuItem reportToolStripMenuItem; + private ToolStripMenuItem purchasingCompanyToolStripMenuItem; + private ToolStripMenuItem contractsToolStripMenuItem1; + private ToolStripMenuItem delegateToAgentsToolStripMenuItem; + } +} \ No newline at end of file diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/FormEnterprice.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/FormEnterprice.cs new file mode 100644 index 0000000..3a814c3 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/FormEnterprice.cs @@ -0,0 +1,82 @@ +using TradeAndProcurementEnterprice.Forms; +using Unity; + +namespace TradeAndProcurementEnterprice +{ + public partial class FormEnterprice : Form + { + private readonly IUnityContainer _container; + + public FormEnterprice(IUnityContainer container) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + } + + private void AgentsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " !", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void NomenclatureToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " !", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void PurchasingCompanyToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " !", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ContractsToolStripMenuItem1_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " !", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void DelegateToAgentsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " !", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void FormEnterprice_Load(object sender, EventArgs e) + { + + } + } +} \ No newline at end of file diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/FormEnterprice.resx b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/FormEnterprice.resx new file mode 100644 index 0000000..b48baf1 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/FormEnterprice.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + \ No newline at end of file diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgent.Designer.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgent.Designer.cs new file mode 100644 index 0000000..6ca1722 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgent.Designer.cs @@ -0,0 +1,158 @@ +namespace TradeAndProcurementEnterprice.Forms +{ + partial class FormAgent + { + /// + /// 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(); + comboBoxQualification = new ComboBox(); + textBoxName = new TextBox(); + labelCategory = new Label(); + labelQualification = new Label(); + labelName = new Label(); + checkedListBoxCategory = new CheckedListBox(); + SuspendLayout(); + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(280, 412); + buttonCancel.Margin = new Padding(6, 6, 6, 6); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(156, 49); + buttonCancel.TabIndex = 16; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(80, 412); + buttonSave.Margin = new Padding(6, 6, 6, 6); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(156, 49); + buttonSave.TabIndex = 17; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // comboBoxQualification + // + comboBoxQualification.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + comboBoxQualification.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxQualification.FormattingEnabled = true; + comboBoxQualification.Location = new Point(217, 124); + comboBoxQualification.Margin = new Padding(6, 6, 6, 6); + comboBoxQualification.Name = "comboBoxQualification"; + comboBoxQualification.Size = new Size(273, 40); + comboBoxQualification.TabIndex = 14; + // + // textBoxName + // + textBoxName.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + textBoxName.Location = new Point(217, 38); + textBoxName.Margin = new Padding(6, 6, 6, 6); + textBoxName.Name = "textBoxName"; + textBoxName.Size = new Size(273, 39); + textBoxName.TabIndex = 11; + // + // labelCategory + // + labelCategory.AutoSize = true; + labelCategory.Location = new Point(39, 220); + labelCategory.Margin = new Padding(6, 0, 6, 0); + labelCategory.Name = "labelCategory"; + labelCategory.Size = new Size(126, 32); + labelCategory.TabIndex = 7; + labelCategory.Text = "Категория"; + // + // labelQualification + // + labelQualification.AutoSize = true; + labelQualification.Location = new Point(43, 130); + labelQualification.Margin = new Padding(6, 0, 6, 0); + labelQualification.Name = "labelQualification"; + labelQualification.Size = new Size(174, 32); + labelQualification.TabIndex = 8; + labelQualification.Text = "Квалификация"; + // + // labelName + // + labelName.AutoSize = true; + labelName.Location = new Point(39, 53); + labelName.Margin = new Padding(6, 0, 6, 0); + labelName.Name = "labelName"; + labelName.Size = new Size(67, 32); + labelName.TabIndex = 10; + labelName.Text = "ФИО"; + // + // checkedListBoxCategory + // + checkedListBoxCategory.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + checkedListBoxCategory.FormattingEnabled = true; + checkedListBoxCategory.Location = new Point(217, 211); + checkedListBoxCategory.Margin = new Padding(6, 6, 6, 6); + checkedListBoxCategory.Name = "checkedListBoxCategory"; + checkedListBoxCategory.Size = new Size(273, 148); + checkedListBoxCategory.TabIndex = 18; + // + // FormAgent + // + AutoScaleDimensions = new SizeF(13F, 32F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(549, 504); + Controls.Add(checkedListBoxCategory); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(comboBoxQualification); + Controls.Add(textBoxName); + Controls.Add(labelCategory); + Controls.Add(labelQualification); + Controls.Add(labelName); + Margin = new Padding(6, 6, 6, 6); + MinimumSize = new Size(575, 575); + Name = "FormAgent"; + StartPosition = FormStartPosition.CenterParent; + Text = "Агент-реализатор"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Button buttonCancel; + private Button buttonSave; + private ComboBox comboBoxQualification; + private TextBox textBoxName; + private Label labelCategory; + private Label labelQualification; + private Label labelName; + private CheckedListBox checkedListBoxCategory; + } +} \ No newline at end of file diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgent.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgent.cs new file mode 100644 index 0000000..8b2d9c7 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgent.cs @@ -0,0 +1,108 @@ +using Microsoft.VisualBasic.FileIO; +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 TradeAndProcurementEnterprice.Entities; +using TradeAndProcurementEnterprice.Entities.Enums; +using TradeAndProcurementEnterprice.Repositories; + +namespace TradeAndProcurementEnterprice.Forms +{ + + public partial class FormAgent : Form + { + + private readonly IAgentsRepository _agentsRepository; + + private int? _agentsId; + + public int Id + { + set + { + try + { + var agent = _agentsRepository.ReadAgentByID(value); + if (agent == null) + { + throw new InvalidDataException(nameof(agent)); + } + + textBoxName.Text = agent.Name; + comboBoxQualification.SelectedItem = agent.Qualification; foreach (Category elem in Enum.GetValues(typeof(Category))) + { + if ((elem & agent.Category) != 0) + { + checkedListBoxCategory.SetItemChecked(checkedListBoxCategory.Items.IndexOf(elem), true); + } + } + _agentsId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных!", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + public FormAgent(IAgentsRepository agentsRepository) + { + InitializeComponent(); + _agentsRepository = agentsRepository ?? + throw new ArgumentNullException(nameof(agentsRepository)); + + comboBoxQualification.DataSource = Enum.GetValues(typeof(Qualification)); + + foreach (var elem in Enum.GetValues(typeof(Category))) + { + checkedListBoxCategory.Items.Add(elem); + } + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxName.Text) || checkedListBoxCategory.CheckedItems.Count == 0 || comboBoxQualification.SelectedIndex < 1) + { + throw new Exception("Имеются незаполненные поля!"); + } + + if (_agentsId.HasValue) + { + _agentsRepository.UpdateAgent(CreateAgent(_agentsId.Value)); + } + else + { + _agentsRepository.CreateAgent(CreateAgent(0)); + } + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении!", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private Agent CreateAgent(int id) + { + Category category = Category.None; + foreach (var elem in checkedListBoxCategory.CheckedItems) + { + category |= (Category)elem; + } + + return Agent.CreateEntity(id, textBoxName.Text, (Qualification)comboBoxQualification.SelectedItem, + category); + } + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Form1.resx b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgent.resx similarity index 92% rename from TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Form1.resx rename to TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgent.resx index 1af7de1..8b2ff64 100644 --- a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Form1.resx +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgent.resx @@ -1,17 +1,17 @@  - diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgents.Designer.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgents.Designer.cs new file mode 100644 index 0000000..2cc2a35 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgents.Designer.cs @@ -0,0 +1,134 @@ +namespace TradeAndProcurementEnterprice.Forms +{ + partial class FormAgents + { + /// + /// 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(); + buttonEdit = new Button(); + buttonAdd = new Button(); + dataGridViewData = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonEdit); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(1196, 0); + panel1.Margin = new Padding(6, 6, 6, 6); + panel1.Name = "panel1"; + panel1.Size = new Size(178, 929); + panel1.TabIndex = 0; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.remove; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(32, 390); + buttonDel.Margin = new Padding(6, 6, 6, 6); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(121, 139); + buttonDel.TabIndex = 3; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // buttonEdit + // + buttonEdit.BackgroundImage = Properties.Resources.edit; + buttonEdit.BackgroundImageLayout = ImageLayout.Stretch; + buttonEdit.Location = new Point(32, 203); + buttonEdit.Margin = new Padding(6, 6, 6, 6); + buttonEdit.Name = "buttonEdit"; + buttonEdit.Size = new Size(121, 139); + buttonEdit.TabIndex = 2; + buttonEdit.UseVisualStyleBackColor = true; + buttonEdit.Click += ButtonEdit_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.add; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(32, 26); + buttonAdd.Margin = new Padding(6, 6, 6, 6); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(121, 139); + buttonAdd.TabIndex = 1; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridViewData + // + dataGridViewData.AllowUserToAddRows = false; + dataGridViewData.AllowUserToDeleteRows = false; + dataGridViewData.AllowUserToResizeColumns = false; + dataGridViewData.AllowUserToResizeRows = false; + dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewData.Dock = DockStyle.Fill; + dataGridViewData.Location = new Point(0, 0); + dataGridViewData.Margin = new Padding(6, 6, 6, 6); + dataGridViewData.MultiSelect = false; + dataGridViewData.Name = "dataGridViewData"; + dataGridViewData.ReadOnly = true; + dataGridViewData.RowHeadersVisible = false; + dataGridViewData.RowHeadersWidth = 82; + dataGridViewData.RowTemplate.Height = 25; + dataGridViewData.Size = new Size(1196, 929); + dataGridViewData.TabIndex = 1; + // + // FormAgents + // + AutoScaleDimensions = new SizeF(13F, 32F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1374, 929); + Controls.Add(dataGridViewData); + Controls.Add(panel1); + Margin = new Padding(6, 6, 6, 6); + MinimumSize = new Size(1000, 630); + Name = "FormAgents"; + StartPosition = FormStartPosition.CenterParent; + Text = "Агенты-реализаторы"; + Load += FormAgents_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonAdd; + private Button buttonDel; + private Button buttonEdit; + private DataGridView dataGridViewData; + } +} \ No newline at end of file diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgents.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgents.cs new file mode 100644 index 0000000..4effb14 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgents.cs @@ -0,0 +1,115 @@ +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 TradeAndProcurementEnterprice.Repositories; +using TradeAndProcurementEnterprice.Repositories.Implementations; +using Unity; + +namespace TradeAndProcurementEnterprice.Forms +{ + public partial class FormAgents : Form + { + private readonly IUnityContainer _container; + + private readonly IAgentsRepository _agentsRepository; + + public FormAgents(IUnityContainer container, IAgentsRepository agentsRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _agentsRepository = agentsRepository ?? + throw new ArgumentNullException(nameof(agentsRepository)); + } + + private void FormAgents_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 ButtonEdit_Click(object sender, EventArgs e) + { + if (!TryGetIdFromSelectedRow(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 (!TryGetIdFromSelectedRow(out var findId)) + { + return; + } + + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _agentsRepository.DeleteAgent(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении!", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridViewData.DataSource = _agentsRepository.ReadAgents(); + + private bool TryGetIdFromSelectedRow(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/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgents.resx b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgents.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormAgents.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/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContract.Designer.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContract.Designer.cs new file mode 100644 index 0000000..2daca3b --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContract.Designer.cs @@ -0,0 +1,189 @@ +namespace TradeAndProcurementEnterprice.Forms +{ + partial class FormContract + { + /// + /// 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(); + comboBoxPurchasingCompany = new ComboBox(); + comboBoxAgent = new ComboBox(); + labelAgent = new Label(); + labelPurchatingCompany = new Label(); + groupBox1 = new GroupBox(); + dataGridViewProduct = new DataGridView(); + ColumnProduct = new DataGridViewComboBoxColumn(); + ColumnQuantity = new DataGridViewTextBoxColumn(); + groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewProduct).BeginInit(); + SuspendLayout(); + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(292, 653); + buttonCancel.Margin = new Padding(6); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(156, 49); + buttonCancel.TabIndex = 32; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(50, 653); + buttonSave.Margin = new Padding(6); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(156, 49); + buttonSave.TabIndex = 33; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // comboBoxPurchasingCompany + // + comboBoxPurchasingCompany.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + comboBoxPurchasingCompany.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxPurchasingCompany.FormattingEnabled = true; + comboBoxPurchasingCompany.Location = new Point(221, 34); + comboBoxPurchasingCompany.Margin = new Padding(6); + comboBoxPurchasingCompany.Name = "comboBoxPurchasingCompany"; + comboBoxPurchasingCompany.Size = new Size(241, 40); + comboBoxPurchasingCompany.TabIndex = 29; + // + // comboBoxAgent + // + comboBoxAgent.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + comboBoxAgent.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxAgent.FormattingEnabled = true; + comboBoxAgent.Location = new Point(221, 126); + comboBoxAgent.Margin = new Padding(6); + comboBoxAgent.Name = "comboBoxAgent"; + comboBoxAgent.Size = new Size(241, 40); + comboBoxAgent.TabIndex = 30; + // + // labelAgent + // + labelAgent.Location = new Point(39, 111); + labelAgent.Margin = new Padding(6, 0, 6, 0); + labelAgent.Name = "labelAgent"; + labelAgent.Size = new Size(167, 77); + labelAgent.TabIndex = 27; + labelAgent.Text = "Агент-\r\nреализатор"; + // + // labelPurchatingCompany + // + labelPurchatingCompany.Location = new Point(43, 23); + labelPurchatingCompany.Margin = new Padding(6, 0, 6, 0); + labelPurchatingCompany.Name = "labelPurchatingCompany"; + labelPurchatingCompany.Size = new Size(163, 68); + labelPurchatingCompany.TabIndex = 28; + labelPurchatingCompany.Text = "Компания закупщик"; + // + // groupBox1 + // + groupBox1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + groupBox1.Controls.Add(dataGridViewProduct); + groupBox1.Location = new Point(43, 218); + groupBox1.Margin = new Padding(6); + groupBox1.Name = "groupBox1"; + groupBox1.Padding = new Padding(6); + groupBox1.Size = new Size(422, 422); + groupBox1.TabIndex = 34; + groupBox1.TabStop = false; + groupBox1.Text = "Продукт"; + // + // dataGridViewProduct + // + dataGridViewProduct.AllowUserToResizeColumns = false; + dataGridViewProduct.AllowUserToResizeRows = false; + dataGridViewProduct.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + dataGridViewProduct.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewProduct.Columns.AddRange(new DataGridViewColumn[] { ColumnProduct, ColumnQuantity }); + dataGridViewProduct.Location = new Point(6, 41); + dataGridViewProduct.Margin = new Padding(6); + dataGridViewProduct.MultiSelect = false; + dataGridViewProduct.Name = "dataGridViewProduct"; + dataGridViewProduct.RowHeadersVisible = false; + dataGridViewProduct.RowHeadersWidth = 82; + dataGridViewProduct.RowTemplate.Height = 25; + dataGridViewProduct.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewProduct.Size = new Size(404, 375); + dataGridViewProduct.TabIndex = 0; + // + // ColumnProduct + // + ColumnProduct.HeaderText = "Наименование"; + ColumnProduct.MinimumWidth = 10; + ColumnProduct.Name = "ColumnProduct"; + ColumnProduct.Width = 200; + // + // ColumnQuantity + // + ColumnQuantity.HeaderText = "Количесво"; + ColumnQuantity.MinimumWidth = 10; + ColumnQuantity.Name = "ColumnQuantity"; + ColumnQuantity.Width = 200; + // + // FormContract + // + AutoScaleDimensions = new SizeF(13F, 32F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(497, 727); + Controls.Add(groupBox1); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(comboBoxPurchasingCompany); + Controls.Add(comboBoxAgent); + Controls.Add(labelAgent); + Controls.Add(labelPurchatingCompany); + Margin = new Padding(6); + MinimumSize = new Size(480, 730); + Name = "FormContract"; + StartPosition = FormStartPosition.CenterParent; + Text = "Контракт"; + groupBox1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewProduct).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Button buttonCancel; + private Button buttonSave; + private ComboBox comboBoxPurchasingCompany; + private ComboBox comboBoxAgent; + private Label labelAgent; + private Label labelPurchatingCompany; + private GroupBox groupBox1; + private DataGridView dataGridViewProduct; + private DataGridViewComboBoxColumn ColumnProduct; + private DataGridViewTextBoxColumn ColumnQuantity; + } +} \ No newline at end of file diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContract.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContract.cs new file mode 100644 index 0000000..ad41ba6 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContract.cs @@ -0,0 +1,75 @@ +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 TradeAndProcurementEnterprice.Entities; +using TradeAndProcurementEnterprice.Repositories; +using TradeAndProcurementEnterprice.Repositories.Implementations; + +namespace TradeAndProcurementEnterprice.Forms +{ + public partial class FormContract : Form + { + private readonly IContractRepository _contractRepository; + + public FormContract(IContractRepository contractRepository, IAgentsRepository agentsRepository, + IPurchasingCompanyRepository purchasingCompanyRepository, IProductRepository productRepository) + { + InitializeComponent(); + _contractRepository = contractRepository ?? + throw new ArgumentNullException(nameof(contractRepository)); + + comboBoxPurchasingCompany.DataSource = purchasingCompanyRepository.ReadCompanies(); + comboBoxPurchasingCompany.DisplayMember = "Name"; + comboBoxPurchasingCompany.ValueMember = "Id"; + + comboBoxAgent.DataSource = agentsRepository.ReadAgents(); + comboBoxAgent.DisplayMember = "Name"; + comboBoxAgent.ValueMember = "Id"; + + ColumnProduct.DataSource = productRepository.ReadProducts(); + ColumnProduct.DisplayMember = "Nomenclature"; + ColumnProduct.ValueMember = "Article"; + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (comboBoxAgent.SelectedIndex < 0 || comboBoxPurchasingCompany.SelectedIndex < 0 || dataGridViewProduct.RowCount < 1) + { + throw new Exception("Имеются незаполненные поля!"); + } + + _contractRepository.CreateContract(Contract.CreateOperation(0, + (int)comboBoxPurchasingCompany.SelectedValue!, (int)comboBoxAgent.SelectedValue!, CreateListProductSalesFromDataGrid())); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении!", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private List CreateListProductSalesFromDataGrid() + { + var list = new List(); + foreach (DataGridViewRow row in dataGridViewProduct.Rows) + { + if (row.Cells["ColumnProduct"].Value == null || row.Cells["ColumnQuantity"].Value == null) + { + continue; + } + + list.Add(ProductSales.CreateElement(0, Convert.ToInt32(row.Cells["ColumnProduct"]), Convert.ToInt32(row.Cells["ColumnQuantity"]))); + } + return list; + } + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContract.resx b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContract.resx new file mode 100644 index 0000000..70d9360 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContract.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + True + + + True + + \ No newline at end of file diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContracts.Designer.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContracts.Designer.cs new file mode 100644 index 0000000..6a4a595 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContracts.Designer.cs @@ -0,0 +1,104 @@ +namespace TradeAndProcurementEnterprice.Forms +{ + partial class FormContracts + { + /// + /// 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(); + buttonAdd = new Button(); + dataGridViewData = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(1196, 0); + panel1.Margin = new Padding(6, 6, 6, 6); + panel1.Name = "panel1"; + panel1.Size = new Size(178, 929); + panel1.TabIndex = 0; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.add; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(32, 26); + buttonAdd.Margin = new Padding(6, 6, 6, 6); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(121, 139); + buttonAdd.TabIndex = 1; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridViewData + // + dataGridViewData.AllowUserToAddRows = false; + dataGridViewData.AllowUserToDeleteRows = false; + dataGridViewData.AllowUserToResizeColumns = false; + dataGridViewData.AllowUserToResizeRows = false; + dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewData.Dock = DockStyle.Fill; + dataGridViewData.Location = new Point(0, 0); + dataGridViewData.Margin = new Padding(6, 6, 6, 6); + dataGridViewData.MultiSelect = false; + dataGridViewData.Name = "dataGridViewData"; + dataGridViewData.ReadOnly = true; + dataGridViewData.RowHeadersVisible = false; + dataGridViewData.RowHeadersWidth = 82; + dataGridViewData.RowTemplate.Height = 25; + dataGridViewData.Size = new Size(1196, 929); + dataGridViewData.TabIndex = 1; + // + // FormContracts + // + AutoScaleDimensions = new SizeF(13F, 32F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1374, 929); + Controls.Add(dataGridViewData); + Controls.Add(panel1); + Margin = new Padding(6, 6, 6, 6); + MinimumSize = new Size(1000, 630); + Name = "FormContracts"; + StartPosition = FormStartPosition.CenterParent; + Text = "Продажи"; + Load += FormContracts_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonAdd; + private DataGridView dataGridViewData; + } +} \ No newline at end of file diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContracts.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContracts.cs new file mode 100644 index 0000000..3731f3f --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContracts.cs @@ -0,0 +1,58 @@ +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 TradeAndProcurementEnterprice.Repositories; +using TradeAndProcurementEnterprice.Repositories.Implementations; +using Unity; + +namespace TradeAndProcurementEnterprice.Forms +{ + public partial class FormContracts : Form + { + private readonly IUnityContainer _container; + + private readonly IContractRepository _contractRepository; + + public FormContracts(IUnityContainer container, IContractRepository contractRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _contractRepository = contractRepository ?? + throw new ArgumentNullException(nameof(contractRepository)); + } + + private void FormContracts_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 LoadList() => dataGridViewData.DataSource = _contractRepository.ReadContracts(); + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContracts.resx b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContracts.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormContracts.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/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegateToAgent.Designer.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegateToAgent.Designer.cs new file mode 100644 index 0000000..96db5c9 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegateToAgent.Designer.cs @@ -0,0 +1,160 @@ +namespace TradeAndProcurementEnterprice.Forms +{ + partial class FormDelegateToAgent + { + /// + /// 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(); + numericUpDownQuantity = new NumericUpDown(); + comboBoxAgent = new ComboBox(); + labelQuantity = new Label(); + labelAgent = new Label(); + labelProduct = new Label(); + comboBoxProduct = new ComboBox(); + ((System.ComponentModel.ISupportInitialize)numericUpDownQuantity).BeginInit(); + SuspendLayout(); + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(282, 309); + buttonCancel.Margin = new Padding(6, 6, 6, 6); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(156, 49); + buttonCancel.TabIndex = 24; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(82, 309); + buttonSave.Margin = new Padding(6, 6, 6, 6); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(156, 49); + buttonSave.TabIndex = 25; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // numericUpDownQuantity + // + numericUpDownQuantity.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + numericUpDownQuantity.Location = new Point(219, 128); + numericUpDownQuantity.Margin = new Padding(6, 6, 6, 6); + numericUpDownQuantity.Maximum = new decimal(new int[] { 1000000, 0, 0, 0 }); + numericUpDownQuantity.Name = "numericUpDownQuantity"; + numericUpDownQuantity.Size = new Size(277, 39); + numericUpDownQuantity.TabIndex = 23; + // + // comboBoxAgent + // + comboBoxAgent.Anchor = AnchorStyles.Top | AnchorStyles.Right; + comboBoxAgent.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxAgent.FormattingEnabled = true; + comboBoxAgent.Location = new Point(219, 220); + comboBoxAgent.Margin = new Padding(6, 6, 6, 6); + comboBoxAgent.Name = "comboBoxAgent"; + comboBoxAgent.Size = new Size(273, 40); + comboBoxAgent.TabIndex = 22; + // + // labelQuantity + // + labelQuantity.AutoSize = true; + labelQuantity.Location = new Point(41, 132); + labelQuantity.Margin = new Padding(6, 0, 6, 0); + labelQuantity.Name = "labelQuantity"; + labelQuantity.Size = new Size(144, 32); + labelQuantity.TabIndex = 15; + labelQuantity.Text = "Количество"; + // + // labelAgent + // + labelAgent.Location = new Point(41, 208); + labelAgent.Margin = new Padding(6, 0, 6, 0); + labelAgent.Name = "labelAgent"; + labelAgent.Size = new Size(150, 75); + labelAgent.TabIndex = 17; + labelAgent.Text = "Агент-\r\nреализатор"; + // + // labelProduct + // + labelProduct.AutoSize = true; + labelProduct.Location = new Point(41, 45); + labelProduct.Margin = new Padding(6, 0, 6, 0); + labelProduct.Name = "labelProduct"; + labelProduct.Size = new Size(181, 32); + labelProduct.TabIndex = 19; + labelProduct.Text = "Наименование"; + // + // comboBoxProduct + // + comboBoxProduct.Anchor = AnchorStyles.Top | AnchorStyles.Right; + comboBoxProduct.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxProduct.FormattingEnabled = true; + comboBoxProduct.Location = new Point(219, 38); + comboBoxProduct.Margin = new Padding(6, 6, 6, 6); + comboBoxProduct.Name = "comboBoxProduct"; + comboBoxProduct.Size = new Size(273, 40); + comboBoxProduct.TabIndex = 22; + // + // FormDelegateToAgent + // + AutoScaleDimensions = new SizeF(13F, 32F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(554, 409); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(numericUpDownQuantity); + Controls.Add(comboBoxProduct); + Controls.Add(comboBoxAgent); + Controls.Add(labelQuantity); + Controls.Add(labelAgent); + Controls.Add(labelProduct); + Margin = new Padding(6, 6, 6, 6); + MinimumSize = new Size(580, 480); + Name = "FormDelegateToAgent"; + StartPosition = FormStartPosition.CenterParent; + Text = "Передача агентам"; + ((System.ComponentModel.ISupportInitialize)numericUpDownQuantity).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + private Button buttonCancel; + private Button buttonSave; + private NumericUpDown numericUpDownQuantity; + private ComboBox comboBoxAgent; + private Label labelQuantity; + private Label labelAgent; + private Label labelProduct; + private ComboBox comboBoxProduct; + } +} \ No newline at end of file diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegateToAgent.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegateToAgent.cs new file mode 100644 index 0000000..52b110b --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegateToAgent.cs @@ -0,0 +1,56 @@ +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 TradeAndProcurementEnterprice.Entities; +using TradeAndProcurementEnterprice.Repositories; + +namespace TradeAndProcurementEnterprice.Forms +{ + public partial class FormDelegateToAgent : Form + { + private readonly IDelegateToAgentRepository _delegateToAgentRepository; + + public FormDelegateToAgent(IDelegateToAgentRepository delegateToAgentRepository, IProductRepository productRepository, + IAgentsRepository agentsRepository) + { + InitializeComponent(); + _delegateToAgentRepository = delegateToAgentRepository ?? + throw new ArgumentNullException(nameof(delegateToAgentRepository)); + + comboBoxProduct.DataSource = productRepository.ReadProducts(); + comboBoxProduct.DisplayMember = "Nomenclature"; + comboBoxProduct.ValueMember = "Article"; + + comboBoxAgent.DataSource = agentsRepository.ReadAgents(); + comboBoxAgent.DisplayMember = "Name"; + comboBoxAgent.ValueMember = "Id"; + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (comboBoxProduct.SelectedIndex < 0 || comboBoxAgent.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненные поля!"); + } + + _delegateToAgentRepository.CreateDelegatesToAgent(DelegateToAgents.CreateOperation(0, + (int)comboBoxProduct.SelectedValue!, Convert.ToInt32(numericUpDownQuantity.Value), + (int)comboBoxAgent.SelectedValue!)); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении!", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegateToAgent.resx b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegateToAgent.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegateToAgent.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/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegatesToAgents.Designer.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegatesToAgents.Designer.cs new file mode 100644 index 0000000..119fddf --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegatesToAgents.Designer.cs @@ -0,0 +1,104 @@ +namespace TradeAndProcurementEnterprice.Forms +{ + partial class FormDelegatesToAgents + { + /// + /// 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(); + buttonAdd = new Button(); + dataGridViewData = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(1196, 0); + panel1.Margin = new Padding(6, 6, 6, 6); + panel1.Name = "panel1"; + panel1.Size = new Size(178, 929); + panel1.TabIndex = 0; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.add; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(32, 26); + buttonAdd.Margin = new Padding(6, 6, 6, 6); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(121, 139); + buttonAdd.TabIndex = 1; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridViewData + // + dataGridViewData.AllowUserToAddRows = false; + dataGridViewData.AllowUserToDeleteRows = false; + dataGridViewData.AllowUserToResizeColumns = false; + dataGridViewData.AllowUserToResizeRows = false; + dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewData.Dock = DockStyle.Fill; + dataGridViewData.Location = new Point(0, 0); + dataGridViewData.Margin = new Padding(6, 6, 6, 6); + dataGridViewData.MultiSelect = false; + dataGridViewData.Name = "dataGridViewData"; + dataGridViewData.ReadOnly = true; + dataGridViewData.RowHeadersVisible = false; + dataGridViewData.RowHeadersWidth = 82; + dataGridViewData.RowTemplate.Height = 25; + dataGridViewData.Size = new Size(1196, 929); + dataGridViewData.TabIndex = 1; + // + // FormDelegatesToAgents + // + AutoScaleDimensions = new SizeF(13F, 32F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1374, 929); + Controls.Add(dataGridViewData); + Controls.Add(panel1); + Margin = new Padding(6, 6, 6, 6); + MinimumSize = new Size(1000, 630); + Name = "FormDelegatesToAgents"; + StartPosition = FormStartPosition.CenterParent; + Text = "Передача товара агентам-реализаторам"; + Load += FormDelegatesToAgents_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonAdd; + private DataGridView dataGridViewData; + } +} \ No newline at end of file diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegatesToAgents.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegatesToAgents.cs new file mode 100644 index 0000000..c198d49 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegatesToAgents.cs @@ -0,0 +1,56 @@ +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 TradeAndProcurementEnterprice.Repositories; +using Unity; + +namespace TradeAndProcurementEnterprice.Forms +{ + public partial class FormDelegatesToAgents : Form + { + private readonly IUnityContainer _container; + + private readonly IDelegateToAgentRepository _delegateToAgentRepository; + + public FormDelegatesToAgents(IUnityContainer container, IDelegateToAgentRepository delegateToAgentRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _delegateToAgentRepository = delegateToAgentRepository ?? + throw new ArgumentNullException(nameof(delegateToAgentRepository)); + } + + private void FormDelegatesToAgents_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 LoadList() => dataGridViewData.DataSource = _delegateToAgentRepository.ReadDelegatesToAgent(); + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegatesToAgents.resx b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegatesToAgents.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormDelegatesToAgents.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/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProduct.Designer.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProduct.Designer.cs new file mode 100644 index 0000000..d3e8586 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProduct.Designer.cs @@ -0,0 +1,200 @@ +namespace TradeAndProcurementEnterprice.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() + { + labelNomenclature = new Label(); + labelPrice = new Label(); + labelUnit = new Label(); + labelCategory = new Label(); + labelInventoryQuantity = new Label(); + textBoxNomenclature = new TextBox(); + numericUpDownPrice = new NumericUpDown(); + comboBoxUnit = new ComboBox(); + numericUpDownQuantity = new NumericUpDown(); + buttonSave = new Button(); + buttonCancel = new Button(); + comboBoxCategory = new ComboBox(); + ((System.ComponentModel.ISupportInitialize)numericUpDownPrice).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownQuantity).BeginInit(); + SuspendLayout(); + // + // labelNomenclature + // + labelNomenclature.AutoSize = true; + labelNomenclature.Location = new Point(26, 27); + labelNomenclature.Name = "labelNomenclature"; + labelNomenclature.Size = new Size(180, 33); + labelNomenclature.TabIndex = 0; + labelNomenclature.Text = "Номенклатура"; + // + // labelPrice + // + labelPrice.Location = new Point(26, 84); + labelPrice.Name = "labelPrice"; + labelPrice.Size = new Size(158, 73); + labelPrice.TabIndex = 0; + labelPrice.Text = "Цена за единицу"; + // + // labelUnit + // + labelUnit.Location = new Point(26, 163); + labelUnit.Name = "labelUnit"; + labelUnit.Size = new Size(158, 73); + labelUnit.TabIndex = 0; + labelUnit.Text = "Единица измерения"; + // + // labelCategory + // + labelCategory.AutoSize = true; + labelCategory.Location = new Point(26, 270); + labelCategory.Name = "labelCategory"; + labelCategory.Size = new Size(131, 33); + labelCategory.TabIndex = 0; + labelCategory.Text = "Категория"; + // + // labelInventoryQuantity + // + labelInventoryQuantity.Location = new Point(26, 331); + labelInventoryQuantity.Name = "labelInventoryQuantity"; + labelInventoryQuantity.Size = new Size(158, 72); + labelInventoryQuantity.TabIndex = 0; + labelInventoryQuantity.Text = "Количество на складе"; + // + // textBoxNomenclature + // + textBoxNomenclature.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + textBoxNomenclature.Location = new Point(248, 24); + textBoxNomenclature.Name = "textBoxNomenclature"; + textBoxNomenclature.Size = new Size(237, 41); + textBoxNomenclature.TabIndex = 1; + // + // numericUpDownPrice + // + numericUpDownPrice.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + numericUpDownPrice.DecimalPlaces = 2; + numericUpDownPrice.Location = new Point(248, 100); + numericUpDownPrice.Name = "numericUpDownPrice"; + numericUpDownPrice.Size = new Size(237, 41); + numericUpDownPrice.TabIndex = 2; + // + // comboBoxUnit + // + comboBoxUnit.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + comboBoxUnit.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxUnit.FormattingEnabled = true; + comboBoxUnit.Location = new Point(248, 179); + comboBoxUnit.Name = "comboBoxUnit"; + comboBoxUnit.Size = new Size(237, 41); + comboBoxUnit.TabIndex = 3; + // + // numericUpDownQuantity + // + numericUpDownQuantity.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + numericUpDownQuantity.Location = new Point(248, 343); + numericUpDownQuantity.Maximum = new decimal(new int[] { 1000000, 0, 0, 0 }); + numericUpDownQuantity.Name = "numericUpDownQuantity"; + numericUpDownQuantity.Size = new Size(237, 41); + numericUpDownQuantity.TabIndex = 4; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(44, 424); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(201, 46); + buttonSave.TabIndex = 5; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(274, 424); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(201, 46); + buttonCancel.TabIndex = 5; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // comboBoxCategory + // + comboBoxCategory.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + comboBoxCategory.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxCategory.FormattingEnabled = true; + comboBoxCategory.Location = new Point(248, 262); + comboBoxCategory.Name = "comboBoxCategory"; + comboBoxCategory.Size = new Size(237, 41); + comboBoxCategory.TabIndex = 14; + // + // FormProduct + // + AutoScaleDimensions = new SizeF(15F, 33F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(559, 514); + Controls.Add(comboBoxCategory); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(numericUpDownQuantity); + Controls.Add(comboBoxUnit); + Controls.Add(numericUpDownPrice); + Controls.Add(textBoxNomenclature); + Controls.Add(labelInventoryQuantity); + Controls.Add(labelCategory); + Controls.Add(labelUnit); + Controls.Add(labelPrice); + Controls.Add(labelNomenclature); + Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point); + MinimumSize = new Size(585, 585); + Name = "FormProduct"; + StartPosition = FormStartPosition.CenterParent; + Text = "Номенклатура"; + ((System.ComponentModel.ISupportInitialize)numericUpDownPrice).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownQuantity).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label labelNomenclature; + private Label labelPrice; + private Label labelUnit; + private Label labelCategory; + private Label labelInventoryQuantity; + private TextBox textBoxNomenclature; + private NumericUpDown numericUpDownPrice; + private ComboBox comboBoxUnit; + private NumericUpDown numericUpDownQuantity; + private Button buttonSave; + private Button buttonCancel; + private ComboBox comboBoxCategory; + } +} \ No newline at end of file diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProduct.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProduct.cs new file mode 100644 index 0000000..b32d5ed --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProduct.cs @@ -0,0 +1,92 @@ +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 TradeAndProcurementEnterprice.Repositories; +using TradeAndProcurementEnterprice.Entities; +using TradeAndProcurementEnterprice.Entities.Enums; + +namespace TradeAndProcurementEnterprice.Forms +{ + public partial class FormProduct : Form + { + private readonly IProductRepository _productRepository; + + private int? _productArticle; + + public int Article + { + set + { + try + { + var product = _productRepository.ReadProductByArticle(value); + if (product == null) + { + throw new InvalidDataException(nameof(product)); + } + + textBoxNomenclature.Text = product.Nomenclature; + numericUpDownPrice.Value = product.SellingPrice; + comboBoxUnit.SelectedItem = product.Unit; + comboBoxCategory.SelectedItem = product.Category; + numericUpDownQuantity.Value = product.InventoryQuantity; + _productArticle = 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)); + + comboBoxUnit.DataSource = Enum.GetValues(typeof(Unit)); + comboBoxCategory.DataSource = Enum.GetValues(typeof(Category)); + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrEmpty(textBoxNomenclature.Text) || comboBoxUnit.SelectedIndex < 1 + || comboBoxCategory.SelectedIndex < 1) + { + throw new Exception("Имеются незаполненные поля!"); + } + + if (_productArticle.HasValue) + { + _productRepository.UpdateProduct(CreateProduct(_productArticle.Value)); + } + else + { + _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(); + + private Product CreateProduct(int article) => Product.CreateEntity(article, textBoxNomenclature.Text, + numericUpDownPrice.Value, (Unit)comboBoxUnit.SelectedItem, (Category)comboBoxCategory.SelectedItem, + Convert.ToInt32(numericUpDownQuantity.Value)); + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProduct.resx b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProduct.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/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/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProducts.Designer.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProducts.Designer.cs new file mode 100644 index 0000000..22a2a1a --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProducts.Designer.cs @@ -0,0 +1,134 @@ +namespace TradeAndProcurementEnterprice.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() + { + panel1 = new Panel(); + buttonDel = new Button(); + buttonEdit = new Button(); + buttonAdd = new Button(); + dataGridViewData = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonEdit); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(1196, 0); + panel1.Margin = new Padding(6, 6, 6, 6); + panel1.Name = "panel1"; + panel1.Size = new Size(178, 929); + panel1.TabIndex = 0; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.remove; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(32, 390); + buttonDel.Margin = new Padding(6, 6, 6, 6); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(121, 139); + buttonDel.TabIndex = 3; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // buttonEdit + // + buttonEdit.BackgroundImage = Properties.Resources.edit; + buttonEdit.BackgroundImageLayout = ImageLayout.Stretch; + buttonEdit.Location = new Point(32, 203); + buttonEdit.Margin = new Padding(6, 6, 6, 6); + buttonEdit.Name = "buttonEdit"; + buttonEdit.Size = new Size(121, 139); + buttonEdit.TabIndex = 2; + buttonEdit.UseVisualStyleBackColor = true; + buttonEdit.Click += ButtonEdit_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.add; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(32, 26); + buttonAdd.Margin = new Padding(6, 6, 6, 6); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(121, 139); + buttonAdd.TabIndex = 1; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridViewData + // + dataGridViewData.AllowUserToAddRows = false; + dataGridViewData.AllowUserToDeleteRows = false; + dataGridViewData.AllowUserToResizeColumns = false; + dataGridViewData.AllowUserToResizeRows = false; + dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewData.Dock = DockStyle.Fill; + dataGridViewData.Location = new Point(0, 0); + dataGridViewData.Margin = new Padding(6, 6, 6, 6); + dataGridViewData.MultiSelect = false; + dataGridViewData.Name = "dataGridViewData"; + dataGridViewData.ReadOnly = true; + dataGridViewData.RowHeadersVisible = false; + dataGridViewData.RowHeadersWidth = 82; + dataGridViewData.RowTemplate.Height = 25; + dataGridViewData.Size = new Size(1196, 929); + dataGridViewData.TabIndex = 1; + // + // FormProducts + // + AutoScaleDimensions = new SizeF(13F, 32F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1374, 929); + Controls.Add(dataGridViewData); + Controls.Add(panel1); + Margin = new Padding(6, 6, 6, 6); + MinimumSize = new Size(1000, 630); + Name = "FormProducts"; + StartPosition = FormStartPosition.CenterParent; + Text = "Номенклатура"; + Load += FormProducts_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonAdd; + private Button buttonDel; + private Button buttonEdit; + private DataGridView dataGridViewData; + } +} \ No newline at end of file diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProducts.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProducts.cs new file mode 100644 index 0000000..9b4748e --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProducts.cs @@ -0,0 +1,113 @@ +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 TradeAndProcurementEnterprice.Repositories; +using Unity; + +namespace TradeAndProcurementEnterprice.Forms +{ + public partial class FormProducts : Form + { + private readonly IUnityContainer _container; + + private readonly IProductRepository _productRepository; + + public FormProducts(IUnityContainer container, IProductRepository productRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _productRepository = productRepository ?? + throw new ArgumentNullException(nameof(productRepository)); + } + + private void FormProducts_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 ButtonEdit_Click(object sender, EventArgs e) + { + if (!TryGetIdFromSelectedRow(out var findId)) + { + return; + } + + try + { + var form = _container.Resolve(); + form.Article = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении!", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdFromSelectedRow(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() => dataGridViewData.DataSource = _productRepository.ReadProducts(); + + private bool TryGetIdFromSelectedRow(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["Article"].Value); + return true; + } + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProducts.resx b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormProducts.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/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/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompanies.Designer.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompanies.Designer.cs new file mode 100644 index 0000000..a0184c4 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompanies.Designer.cs @@ -0,0 +1,134 @@ +namespace TradeAndProcurementEnterprice.Forms +{ + partial class FormPurchasingCompanies + { + /// + /// 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(); + buttonEdit = new Button(); + buttonAdd = new Button(); + dataGridViewData = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonEdit); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(1196, 0); + panel1.Margin = new Padding(6, 6, 6, 6); + panel1.Name = "panel1"; + panel1.Size = new Size(178, 929); + panel1.TabIndex = 0; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.remove; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(32, 390); + buttonDel.Margin = new Padding(6, 6, 6, 6); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(121, 139); + buttonDel.TabIndex = 3; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // buttonEdit + // + buttonEdit.BackgroundImage = Properties.Resources.edit; + buttonEdit.BackgroundImageLayout = ImageLayout.Stretch; + buttonEdit.Location = new Point(32, 203); + buttonEdit.Margin = new Padding(6, 6, 6, 6); + buttonEdit.Name = "buttonEdit"; + buttonEdit.Size = new Size(121, 139); + buttonEdit.TabIndex = 2; + buttonEdit.UseVisualStyleBackColor = true; + buttonEdit.Click += ButtonEdit_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.add; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(32, 26); + buttonAdd.Margin = new Padding(6, 6, 6, 6); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(121, 139); + buttonAdd.TabIndex = 1; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridViewData + // + dataGridViewData.AllowUserToAddRows = false; + dataGridViewData.AllowUserToDeleteRows = false; + dataGridViewData.AllowUserToResizeColumns = false; + dataGridViewData.AllowUserToResizeRows = false; + dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewData.Dock = DockStyle.Fill; + dataGridViewData.Location = new Point(0, 0); + dataGridViewData.Margin = new Padding(6, 6, 6, 6); + dataGridViewData.MultiSelect = false; + dataGridViewData.Name = "dataGridViewData"; + dataGridViewData.ReadOnly = true; + dataGridViewData.RowHeadersVisible = false; + dataGridViewData.RowHeadersWidth = 82; + dataGridViewData.RowTemplate.Height = 25; + dataGridViewData.Size = new Size(1196, 929); + dataGridViewData.TabIndex = 1; + // + // FormPurchasingCompanies + // + AutoScaleDimensions = new SizeF(13F, 32F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1374, 929); + Controls.Add(dataGridViewData); + Controls.Add(panel1); + Margin = new Padding(6, 6, 6, 6); + MinimumSize = new Size(1000, 630); + Name = "FormPurchasingCompanies"; + StartPosition = FormStartPosition.CenterParent; + Text = "Компании закупщики"; + Load += FormPurchasingCompanies_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonAdd; + private Button buttonDel; + private Button buttonEdit; + private DataGridView dataGridViewData; + } +} \ No newline at end of file diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompanies.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompanies.cs new file mode 100644 index 0000000..5ac48ae --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompanies.cs @@ -0,0 +1,115 @@ +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 TradeAndProcurementEnterprice.Repositories; +using TradeAndProcurementEnterprice.Repositories.Implementations; +using Unity; + +namespace TradeAndProcurementEnterprice.Forms +{ + public partial class FormPurchasingCompanies : Form + { + private readonly IUnityContainer _container; + + private readonly IPurchasingCompanyRepository _companyRepository; + + public FormPurchasingCompanies(IUnityContainer container, IPurchasingCompanyRepository companyRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _companyRepository = companyRepository ?? + throw new ArgumentNullException(nameof(companyRepository)); + } + + private void FormPurchasingCompanies_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 ButtonEdit_Click(object sender, EventArgs e) + { + if (!TryGetIdFromSelectedRow(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 (!TryGetIdFromSelectedRow(out var findId)) + { + return; + } + + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _companyRepository.DeleteCompany(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении!", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridViewData.DataSource = _companyRepository.ReadCompanies(); + + private bool TryGetIdFromSelectedRow(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/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompanies.resx b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompanies.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompanies.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/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompany.Designer.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompany.Designer.cs new file mode 100644 index 0000000..f6e1fc9 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompany.Designer.cs @@ -0,0 +1,104 @@ +namespace TradeAndProcurementEnterprice.Forms +{ + partial class FormPurchasingCompany + { + /// + /// 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() + { + textBoxName = new TextBox(); + labelName = new Label(); + buttonSave = new Button(); + buttonCancel = new Button(); + SuspendLayout(); + // + // textBoxName + // + textBoxName.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + textBoxName.Location = new Point(243, 46); + textBoxName.Margin = new Padding(6, 6, 6, 6); + textBoxName.Name = "textBoxName"; + textBoxName.Size = new Size(271, 39); + textBoxName.TabIndex = 19; + // + // labelName + // + labelName.AutoSize = true; + labelName.Location = new Point(50, 49); + labelName.Margin = new Padding(6, 0, 6, 0); + labelName.Name = "labelName"; + labelName.Size = new Size(181, 32); + labelName.TabIndex = 18; + labelName.Text = "Наименование"; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(91, 121); + buttonSave.Margin = new Padding(6, 6, 6, 6); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(156, 49); + buttonSave.TabIndex = 21; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(290, 121); + buttonCancel.Margin = new Padding(6, 6, 6, 6); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(156, 49); + buttonCancel.TabIndex = 20; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // FormPurchasingCompany + // + AutoScaleDimensions = new SizeF(13F, 32F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(564, 219); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(textBoxName); + Controls.Add(labelName); + Margin = new Padding(6, 6, 6, 6); + MinimumSize = new Size(590, 290); + Name = "FormPurchasingCompany"; + StartPosition = FormStartPosition.CenterParent; + Text = "Компания закупщик"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + private TextBox textBoxName; + private Label labelName; + private Button buttonSave; + private Button buttonCancel; + } +} \ No newline at end of file diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompany.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompany.cs new file mode 100644 index 0000000..1094673 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompany.cs @@ -0,0 +1,84 @@ +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 TradeAndProcurementEnterprice.Entities; +using TradeAndProcurementEnterprice.Entities.Enums; +using TradeAndProcurementEnterprice.Repositories; +using TradeAndProcurementEnterprice.Repositories.Implementations; + +namespace TradeAndProcurementEnterprice.Forms +{ + public partial class FormPurchasingCompany : Form + { + private readonly IPurchasingCompanyRepository _purchasingCompanyRepository; + + private int? _companyId; + + public int Id + { + set + { + try + { + var company = _purchasingCompanyRepository.ReadCompaniesByID(value); + if (company == null) + { + throw new InvalidDataException(nameof(company)); + } + + textBoxName.Text = company.Name; + _companyId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных!", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FormPurchasingCompany(IPurchasingCompanyRepository purchasingCompanyRepository) + { + InitializeComponent(); + _purchasingCompanyRepository = purchasingCompanyRepository ?? + throw new ArgumentNullException(nameof(purchasingCompanyRepository)); + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxName.Text)) + { + throw new Exception("Имеются незаполненные поля!"); + } + + if (_companyId.HasValue) + { + _purchasingCompanyRepository.UpdateCompanies(CreateCompany(_companyId.Value)); + } + else + { + _purchasingCompanyRepository.CreateCompany(CreateCompany(0)); + } + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении!", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private PurchasingCompany CreateCompany(int id) => + PurchasingCompany.CreateEntity(id, textBoxName.Text); + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompany.resx b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompany.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Forms/FormPurchasingCompany.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/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Program.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Program.cs index 1edaf68..e0feeeb 100644 --- a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Program.cs +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Program.cs @@ -1,3 +1,8 @@ +using TradeAndProcurementEnterprice.Repositories; +using TradeAndProcurementEnterprice.Repositories.Implementations; +using Unity; +using Unity.Lifetime; + namespace TradeAndProcurementEnterprice { internal static class Program @@ -11,7 +16,20 @@ namespace TradeAndProcurementEnterprice // 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/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Properties/Resources.Designer.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Properties/Resources.Designer.cs new file mode 100644 index 0000000..27e7917 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace TradeAndProcurementEnterprice.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("TradeAndProcurementEnterprice.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 add { + get { + object obj = ResourceManager.GetObject("add", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap edit { + get { + object obj = ResourceManager.GetObject("edit", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap photo_2024_12_03_21_34_38 { + get { + object obj = ResourceManager.GetObject("photo_2024-12-03_21-34-38", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap remove { + get { + object obj = ResourceManager.GetObject("remove", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Properties/Resources.resx b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Properties/Resources.resx new file mode 100644 index 0000000..72bc2f4 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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\photo_2024-12-03_21-34-38.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\remove.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\edit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IAgentsRepository.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IAgentsRepository.cs new file mode 100644 index 0000000..274d8ec --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IAgentsRepository.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TradeAndProcurementEnterprice.Entities; + +namespace TradeAndProcurementEnterprice.Repositories; + +public interface IAgentsRepository +{ + IEnumerable ReadAgents(); + + Agent ReadAgentByID(int id); + + void CreateAgent(Agent agent); + + void UpdateAgent(Agent agent); + + void DeleteAgent(int id); +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IContractRepository.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IContractRepository.cs new file mode 100644 index 0000000..4d9604a --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IContractRepository.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TradeAndProcurementEnterprice.Entities; + +namespace TradeAndProcurementEnterprice.Repositories; + +public interface IContractRepository +{ + IEnumerable ReadContracts(DateTime? dateFrom = null, DateTime? dateTo = null, + int? productArticle = null, int? agentID = null, int? purchasingCompaniID = null); + + void CreateContract(Contract contract); +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IDelegateToAgentRepository.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IDelegateToAgentRepository.cs new file mode 100644 index 0000000..a52dc92 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IDelegateToAgentRepository.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TradeAndProcurementEnterprice.Entities; + +namespace TradeAndProcurementEnterprice.Repositories; + +public interface IDelegateToAgentRepository +{ + IEnumerable ReadDelegatesToAgent(DateTime? dateFrom = null, DateTime? dateTo = null, + int? productArticle = null, int? agentID = null); + + void CreateDelegatesToAgent(DelegateToAgents delegateToAgents); +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IProductRepository.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IProductRepository.cs new file mode 100644 index 0000000..c1f43f1 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IProductRepository.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TradeAndProcurementEnterprice.Entities; + +namespace TradeAndProcurementEnterprice.Repositories; + +public interface IProductRepository +{ + IEnumerable ReadProducts(); + + Product ReadProductByArticle(int article); + + void CreateProduct(Product product); + + void UpdateProduct(Product product); + + void DeleteProduct(int article); +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IPurchasingCompanyRepository.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IPurchasingCompanyRepository.cs new file mode 100644 index 0000000..9c92ef4 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/IPurchasingCompanyRepository.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TradeAndProcurementEnterprice.Entities; + +namespace TradeAndProcurementEnterprice.Repositories; + +public interface IPurchasingCompanyRepository +{ + IEnumerable ReadCompanies(); + + PurchasingCompany ReadCompaniesByID(int id); + + void CreateCompany(PurchasingCompany agent); + + void UpdateCompanies(PurchasingCompany agent); + + void DeleteCompany(int id); +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/AgentsRepository.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/AgentsRepository.cs new file mode 100644 index 0000000..188c681 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/AgentsRepository.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TradeAndProcurementEnterprice.Entities; + +namespace TradeAndProcurementEnterprice.Repositories.Implementations; + +public class AgentsRepository : IAgentsRepository +{ + public void CreateAgent(Agent agent) + { + } + + public void DeleteAgent(int id) + { + } + + public Agent ReadAgentByID(int id) + { + return Agent.CreateEntity(0, string.Empty, Entities.Enums.Qualification.Junior, Entities.Enums.Category.Other); + } + + public IEnumerable ReadAgents() + { + return []; + } + + public void UpdateAgent(Agent agent) + { + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/ContractRepository.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/ContractRepository.cs new file mode 100644 index 0000000..f261b2b --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/ContractRepository.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TradeAndProcurementEnterprice.Entities; + +namespace TradeAndProcurementEnterprice.Repositories.Implementations; + +public class ContractRepository : IContractRepository +{ + public void CreateContract(Contract contract) + { + } + + public IEnumerable ReadContracts(DateTime? dateFrom = null, DateTime? dateTo = null, int? productArticle = null, int? agentID = null, int? purchasingCompaniID = null) + { + return []; + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/DelegateToAgentRepository.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/DelegateToAgentRepository.cs new file mode 100644 index 0000000..49625ca --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/DelegateToAgentRepository.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TradeAndProcurementEnterprice.Entities; + +namespace TradeAndProcurementEnterprice.Repositories.Implementations; + +public class DelegateToAgentRepository : IDelegateToAgentRepository +{ + public void CreateDelegatesToAgent(DelegateToAgents delegateToAgents) + { + } + + public IEnumerable ReadDelegatesToAgent(DateTime? dateFrom = null, DateTime? dateTo = null, int? productArticle = null, int? agentID = null) + { + return []; + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/ProductRepository.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/ProductRepository.cs new file mode 100644 index 0000000..a34f1ab --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/ProductRepository.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TradeAndProcurementEnterprice.Entities; + +namespace TradeAndProcurementEnterprice.Repositories.Implementations; + +public class ProductRepository : IProductRepository +{ + public void CreateProduct(Product product) + { + } + + public void DeleteProduct(int article) + { + } + + public Product ReadProductByArticle(int article) + { + return Product.CreateEntity(0, string.Empty, 0, Entities.Enums.Unit.Piece, Entities.Enums.Category.Other, 0); + } + + public IEnumerable ReadProducts() + { + return []; + } + + public void UpdateProduct(Product product) + { + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/PurchasingCompanyRepository.cs b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/PurchasingCompanyRepository.cs new file mode 100644 index 0000000..ed5b353 --- /dev/null +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Repositories/Implementations/PurchasingCompanyRepository.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TradeAndProcurementEnterprice.Entities; + +namespace TradeAndProcurementEnterprice.Repositories.Implementations; + +public class PurchasingCompanyRepository : IPurchasingCompanyRepository +{ + public void CreateCompany(PurchasingCompany agent) + { + } + + public void DeleteCompany(int id) + { + } + + public IEnumerable ReadCompanies() + { + return []; + } + + public PurchasingCompany ReadCompaniesByID(int id) + { + return PurchasingCompany.CreateEntity(0, string.Empty); + } + + public void UpdateCompanies(PurchasingCompany agent) + { + } +} diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Resources/add.png b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Resources/add.png new file mode 100644 index 0000000000000000000000000000000000000000..c56faf84ce126148d78b586a1e26c356e8fc8148 GIT binary patch literal 15981 zcmeHu`9IX}_xEdNFqY8RcN&ArT7QO9ny1X<1YU#=>q(ES~mJMl)< zaT{yV^w)Gd{G-(%j6pz|d?(>mDm|3$$nBa%kKTEqp5rBS9)fW5h+Mc2JRH_dYi`Vq z_JiKT3(_dE_Tr}rD+|VuowrCYf3I+?p~1zz6voYF$zE-An2rS{=jY!~AvIzo{vv)` zwg2}>#sh*m=PqU0W#SM+r`4Yi!ucT95N1%6w95O651R1HM>@)ik$Y-t4=6*JP;sTB zbsgaZYeSV@UG(Q&fL!s{CP)oOe_5)xJ|zV{sq}}(+@g$Rs&p`zzuckpS}{(-`t6aB z?f%fP3hG1_crFlrhl$vBg?3#-88JxG-y~e!s~V9{Gx_&j6;~Ug#vt2-T1pml2+CYO zPBx{nazTw?Y+5M_QDykC5Vs^p>lAzo304n^rhn_-Tzy5yD)YB}I14h>?Zo6Tw zMP(zu8c~mpiEkgN*cAq=zeUk<;L$0WgB4nq&4#d*i-Y#m?D7?9(M9L$@}>@Wj3Ci$ zNC61Nd--n}B@^fIFDbFldF-0sP7o;E97}?=E$8m*%cgft4qPB~qi=76sJ2iLTrnGr zC!8~5KcSBC)FSGqj(}JKRs;7`UNdfl$g;1k8t54Yli%?}xFgV(SDcukV*MWa^WtQK znn%QM)+FjMGS4IK&O|Icc6%(od?f9j(#LI{S0|UJN|tT0@y`~v6O2#a7J{fA@Gt?H z-4+hhRrLLIeUcTnL*)ASo?J~__@g+5cAQuW<&A^*Ny1l?q6LWa$JXkJ+vaGJA=kzV zz3CY%Q)6s)lv#s{ya4PYq+bCAk*Z*dQj-?2WfUh`_53Mg=Mn0HFIFi42=H>v<$vi#&lznRDLW(hWxrOQC|! z{3a5zn#fU@P=CO{(@bBOslt6Lw<;0xZS<*-l0?Gdxp~+)F3t_GU*QbCmFMIio!*q~ z-GR>k{H=>o5{`)=(@e5eIx1%EE1~#Z)@hOSMAX~|%Kh|51v#Rfr|55~w)ep6t`|rM zHw7CwbGEKv#L76hq8QjsrDv>I&G7E$aL)B@7I$t_wmyA%&mauFpchkZfjL*Cy%2zK z!BE)r*>bI%%m+GT;uURm3Zby^mHFQ0}>$bm|;MIugh}Ww~+YU#esa&q(OoE{? zJW+!<%t+{r+Z6=$8lIdsBdKaugm)jAg`Y3Tdae->lYni^(a6*Q?m?p-mc@cIjJ#&rb zTr>QaG&G!Dy?96{IG5{>9dzKzf8HQX%dvYI7M*eGm!ML~bsvc=D=YM~qwWKYbErrp zODx}s5Z2mGQ#V{Pn!2u}4F$u>j931OEFtB

~|68uPBeu#NpVWY7$;`_g_mJv(J` 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 literal 0 HcmV?d00001 diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Resources/photo_2024-12-03_21-34-38.jpg b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Resources/photo_2024-12-03_21-34-38.jpg new file mode 100644 index 0000000000000000000000000000000000000000..16ab5c9c1d750b180595bbb954d95a32a5ed5e33 GIT binary patch literal 39443 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 hFX|gPN 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 V$YaSf{O;z%VXrP|E-*6j|JfS&giQbd literal 0 HcmV?d00001 diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Resources/remove.png b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/Resources/remove.png new file mode 100644 index 0000000000000000000000000000000000000000..ab02768ba31460baedaaa4d965c6879e9781517e GIT binary patch literal 12343 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 literal 0 HcmV?d00001 diff --git a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice.csproj b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice.csproj index b57c89e..0f76343 100644 --- a/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice.csproj +++ b/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice/TradeAndProcurementEnterprice.csproj @@ -6,6 +6,26 @@ enable true enable + 12.0 + + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file