From a56de95ee0f0fb2a65e6f18d98c227160aaf7402 Mon Sep 17 00:00:00 2001 From: abazov73 <92822431+abazov73@users.noreply.github.com> Date: Mon, 10 Apr 2023 13:02:23 +0400 Subject: [PATCH] View project for contruction company + minor fixes in contracts and storages. --- .../BusinessLogics/OrderLogic.cs | 1 + .../ViewModels/MaterialOrderViewModel.cs | 4 +- .../ViewModels/OrderViewModel.cs | 7 +- .../ConstructionCompanyDatabase.cs | 12 +- .../Models/MaterialOrder.cs | 2 +- .../Models/Order.cs | 4 +- .../ConstructionCompanyView.csproj | 25 ++ .../FormBrigadeMenu.Designer.cs | 98 ++++++ .../FormBrigadeMenu.cs | 47 +++ .../FormBrigadeMenu.resx | 63 ++++ .../FormEmployee.Designer.cs | 120 ++++++++ .../ConstructionCompanyView/FormEmployee.cs | 110 +++++++ .../ConstructionCompanyView/FormEmployee.resx | 60 ++++ .../FormEmployeeOrder.Designer.cs | 121 ++++++++ .../FormEmployeeOrder.cs | 99 ++++++ .../FormEmployeeOrder.resx | 60 ++++ .../FormEmployeeOrders.Designer.cs | 81 +++++ .../FormEmployeeOrders.cs | 64 ++++ .../FormEmployeeOrders.resx | 60 ++++ .../FormEmployees.Designer.cs | 120 ++++++++ .../ConstructionCompanyView/FormEmployees.cs | 111 +++++++ .../FormEmployees.resx | 60 ++++ .../FormLogin.Designer.cs | 101 +++++++ .../ConstructionCompanyView/FormLogin.cs | 53 ++++ .../ConstructionCompanyView/FormLogin.resx | 60 ++++ .../FormManagerMenu.Designer.cs | 78 +++++ .../FormManagerMenu.cs | 29 ++ .../FormManagerMenu.resx | 66 ++++ .../ConstructionCompanyView/FormMaterial.cs | 1 + .../FormMaterialOrder.Designer.cs | 156 ++++++++++ .../FormMaterialOrder.cs | 128 ++++++++ .../FormMaterialOrder.resx | 60 ++++ .../FormMaterialOrders.Designer.cs | 81 +++++ .../FormMaterialOrders.cs | 67 +++++ .../FormMaterialOrders.resx | 60 ++++ .../FormMaterials.Designer.cs | 20 +- .../FormOrder.Designer.cs | 163 ++++++++++ .../ConstructionCompanyView/FormOrder.cs | 82 +++++ .../ConstructionCompanyView/FormOrder.resx | 60 ++++ .../FormOrders.Designer.cs | 119 ++++++++ .../ConstructionCompanyView/FormOrders.cs | 110 +++++++ .../ConstructionCompanyView/FormOrders.resx | 60 ++++ .../FormPosition.Designer.cs | 119 ++++++++ .../ConstructionCompanyView/FormPosition.cs | 95 ++++++ .../ConstructionCompanyView/FormPosition.resx | 60 ++++ .../FormPositions.Designer.cs | 120 ++++++++ .../ConstructionCompanyView/FormPositions.cs | 110 +++++++ .../FormPositions.resx | 60 ++++ .../FormWarehouseMenu.Designer.cs | 100 +++++++ .../FormWarehouseMenu.cs | 39 +++ .../FormWarehouseMenu.resx | 283 ++++++++++++++++++ .../Logos/warehouseLogo.png | Bin 0 -> 7635 bytes .../ConstructionCompanyView/Program.cs | 16 +- .../Properties/Resources.Designer.cs | 83 +++++ .../Properties/Resources.resx | 127 ++++++++ .../Resources/cash-register-solid.png | Bin 0 -> 6010 bytes .../Resources/users-viewfinder-solid.png | Bin 0 -> 9320 bytes 57 files changed, 4071 insertions(+), 24 deletions(-) create mode 100644 ConstructionCompany/ConstructionCompanyView/FormBrigadeMenu.Designer.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormBrigadeMenu.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormBrigadeMenu.resx create mode 100644 ConstructionCompany/ConstructionCompanyView/FormEmployee.Designer.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormEmployee.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormEmployee.resx create mode 100644 ConstructionCompany/ConstructionCompanyView/FormEmployeeOrder.Designer.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormEmployeeOrder.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormEmployeeOrder.resx create mode 100644 ConstructionCompany/ConstructionCompanyView/FormEmployeeOrders.Designer.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormEmployeeOrders.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormEmployeeOrders.resx create mode 100644 ConstructionCompany/ConstructionCompanyView/FormEmployees.Designer.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormEmployees.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormEmployees.resx create mode 100644 ConstructionCompany/ConstructionCompanyView/FormLogin.Designer.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormLogin.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormLogin.resx create mode 100644 ConstructionCompany/ConstructionCompanyView/FormManagerMenu.Designer.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormManagerMenu.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormManagerMenu.resx create mode 100644 ConstructionCompany/ConstructionCompanyView/FormMaterialOrder.Designer.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormMaterialOrder.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormMaterialOrder.resx create mode 100644 ConstructionCompany/ConstructionCompanyView/FormMaterialOrders.Designer.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormMaterialOrders.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormMaterialOrders.resx create mode 100644 ConstructionCompany/ConstructionCompanyView/FormOrder.Designer.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormOrder.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormOrder.resx create mode 100644 ConstructionCompany/ConstructionCompanyView/FormOrders.Designer.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormOrders.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormOrders.resx create mode 100644 ConstructionCompany/ConstructionCompanyView/FormPosition.Designer.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormPosition.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormPosition.resx create mode 100644 ConstructionCompany/ConstructionCompanyView/FormPositions.Designer.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormPositions.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormPositions.resx create mode 100644 ConstructionCompany/ConstructionCompanyView/FormWarehouseMenu.Designer.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormWarehouseMenu.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/FormWarehouseMenu.resx create mode 100644 ConstructionCompany/ConstructionCompanyView/Logos/warehouseLogo.png create mode 100644 ConstructionCompany/ConstructionCompanyView/Properties/Resources.Designer.cs create mode 100644 ConstructionCompany/ConstructionCompanyView/Properties/Resources.resx create mode 100644 ConstructionCompany/ConstructionCompanyView/Resources/cash-register-solid.png create mode 100644 ConstructionCompany/ConstructionCompanyView/Resources/users-viewfinder-solid.png diff --git a/ConstructionCompany/ConstructionCompanyBusiness/BusinessLogics/OrderLogic.cs b/ConstructionCompany/ConstructionCompanyBusiness/BusinessLogics/OrderLogic.cs index 3039f34..bc715fd 100644 --- a/ConstructionCompany/ConstructionCompanyBusiness/BusinessLogics/OrderLogic.cs +++ b/ConstructionCompany/ConstructionCompanyBusiness/BusinessLogics/OrderLogic.cs @@ -85,6 +85,7 @@ namespace ConstructionCompanyBusinessLogic.BusinessLogics throw new InvalidOperationException("Заказ должен быть переведен в статус выполнения перед готовностью!"); } model.Status = OrderStatus.Завершён; + model.DateEnd = DateTime.Today; _orderStorage.Update(model); return true; } diff --git a/ConstructionCompany/ConstructionCompanyContracts/ViewModels/MaterialOrderViewModel.cs b/ConstructionCompany/ConstructionCompanyContracts/ViewModels/MaterialOrderViewModel.cs index d23f7ed..6e89d0b 100644 --- a/ConstructionCompany/ConstructionCompanyContracts/ViewModels/MaterialOrderViewModel.cs +++ b/ConstructionCompany/ConstructionCompanyContracts/ViewModels/MaterialOrderViewModel.cs @@ -11,11 +11,11 @@ namespace ConstructionCompanyContracts.ViewModels public class MaterialOrderViewModel : IMaterialOrderModel { public int MaterialId { get; set; } + [DisplayName("Адресс заказа")] + public string OrderAdress { get; set; } = string.Empty; [DisplayName("Название материала")] public string MaterialName { get; set; } = string.Empty; public int OrderId { get; set; } - [DisplayName("Адресс заказа")] - public string OrderAdress { get; set; } = string.Empty; [DisplayName("Количество")] public int Quantity { get; set; } } diff --git a/ConstructionCompany/ConstructionCompanyContracts/ViewModels/OrderViewModel.cs b/ConstructionCompany/ConstructionCompanyContracts/ViewModels/OrderViewModel.cs index a9fa24e..90a92a3 100644 --- a/ConstructionCompany/ConstructionCompanyContracts/ViewModels/OrderViewModel.cs +++ b/ConstructionCompany/ConstructionCompanyContracts/ViewModels/OrderViewModel.cs @@ -11,6 +11,8 @@ namespace ConstructionCompanyContracts.ViewModels { public class OrderViewModel : IOrderModel { + [DisplayName("Номер")] + public int Id { get; set; } [DisplayName("Описание")] public string Description {get;set;} = string.Empty; [DisplayName("Адрес")] @@ -25,10 +27,5 @@ namespace ConstructionCompanyContracts.ViewModels public DateTime DateBegin { get; set; } = DateTime.Now.Date; [DisplayName("Дата выполнения")] public DateTime? DateEnd { get; set; } - [DisplayName("Номер")] - public int Id { get; set; } - - public Dictionary OrderEmployees { get; set; } = new(); - public Dictionary OrderMaterials { get; set; } = new(); } } diff --git a/ConstructionCompany/ConstructionCompanyPsqlImplement/ConstructionCompanyDatabase.cs b/ConstructionCompany/ConstructionCompanyPsqlImplement/ConstructionCompanyDatabase.cs index f5d7b9d..abdebb9 100644 --- a/ConstructionCompany/ConstructionCompanyPsqlImplement/ConstructionCompanyDatabase.cs +++ b/ConstructionCompany/ConstructionCompanyPsqlImplement/ConstructionCompanyDatabase.cs @@ -171,8 +171,16 @@ namespace ConstructionCompanyPsqlImplement } string customerNumber = readerOrders.GetString(5); DateTime dateBegin = readerOrders.GetDateTime(6); - DateTime? dateEnd = readerOrders.GetDateTime(7); - Order? order = Order.Create(new OrderBindingModel { Id = id, Description = description, Adress = adress, Price = price, Status = status, CustomerNumber = customerNumber, DateBegin = dateBegin, DateEnd = dateEnd}); + Order? order; + if (status == OrderStatus.Завершён) + { + DateTime? dateEnd = readerOrders.GetDateTime(7); + order = Order.Create(new OrderBindingModel { Id = id, Description = description, Adress = adress, Price = price, Status = status, CustomerNumber = customerNumber, DateBegin = dateBegin, DateEnd = dateEnd }); + } + else + { + order = Order.Create(new OrderBindingModel { Id = id, Description = description, Adress = adress, Price = price, Status = status, CustomerNumber = customerNumber, DateBegin = dateBegin}); + } if (order != null) _orders.Add(order); } readerOrders.Close(); diff --git a/ConstructionCompany/ConstructionCompanyPsqlImplement/Models/MaterialOrder.cs b/ConstructionCompany/ConstructionCompanyPsqlImplement/Models/MaterialOrder.cs index a5d8e25..da7918f 100644 --- a/ConstructionCompany/ConstructionCompanyPsqlImplement/Models/MaterialOrder.cs +++ b/ConstructionCompany/ConstructionCompanyPsqlImplement/Models/MaterialOrder.cs @@ -37,7 +37,7 @@ namespace ConstructionCompanyPsqlImplement.Models { return ""; } - return $"INSERT INTO material_order(material_id, order_id, quantity) VALUES({model.MaterialId}, {model.OrderId}, {model.Quantity});"; + return $"INSERT INTO material_order(material_id, order_id, quantiny) VALUES({model.MaterialId}, {model.OrderId}, {model.Quantity});"; } public static string DeleteCommand(MaterialOrderBindingModel? model) { diff --git a/ConstructionCompany/ConstructionCompanyPsqlImplement/Models/Order.cs b/ConstructionCompany/ConstructionCompanyPsqlImplement/Models/Order.cs index a86a273..57d1f77 100644 --- a/ConstructionCompany/ConstructionCompanyPsqlImplement/Models/Order.cs +++ b/ConstructionCompany/ConstructionCompanyPsqlImplement/Models/Order.cs @@ -70,9 +70,7 @@ namespace ConstructionCompanyPsqlImplement.Models { return ""; } - return $"UPDATE \"order\" SET description = \'{model.Description}\', adress = \'{model.Adress}\', " + - $"price = {model.Price}, status = \'{model.Status}\', customer_number = \'{model.CustomerNumber}\', " + - $"date_begin = \'{model.CustomerNumber}\', date_end = {(model.DateEnd.HasValue ? $"\'{model.DateEnd}\'" : "null")} " + + return $"UPDATE \"order\" SET status = \'{model.Status}\', date_end = {(model.DateEnd.HasValue ? $"\'{model.DateEnd}\'" : "null")} " + $"WHERE id = {model.Id}"; } diff --git a/ConstructionCompany/ConstructionCompanyView/ConstructionCompanyView.csproj b/ConstructionCompany/ConstructionCompanyView/ConstructionCompanyView.csproj index 0596a05..7d2b63a 100644 --- a/ConstructionCompany/ConstructionCompanyView/ConstructionCompanyView.csproj +++ b/ConstructionCompany/ConstructionCompanyView/ConstructionCompanyView.csproj @@ -8,6 +8,10 @@ enable + + + + @@ -24,4 +28,25 @@ + + + Always + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/ConstructionCompany/ConstructionCompanyView/FormBrigadeMenu.Designer.cs b/ConstructionCompany/ConstructionCompanyView/FormBrigadeMenu.Designer.cs new file mode 100644 index 0000000..57d5948 --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormBrigadeMenu.Designer.cs @@ -0,0 +1,98 @@ +namespace ConstructionCompanyView +{ + partial class FormBrigadeMenu + { + /// + /// 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.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.сотрудникиToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.должностиToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.назначитьНаЗаказToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // menuStrip1 + // + this.menuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.сотрудникиToolStripMenuItem, + this.должностиToolStripMenuItem, + this.назначитьНаЗаказToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(645, 28); + this.menuStrip1.TabIndex = 0; + this.menuStrip1.Text = "menuStrip1"; + // + // сотрудникиToolStripMenuItem + // + this.сотрудникиToolStripMenuItem.Name = "сотрудникиToolStripMenuItem"; + this.сотрудникиToolStripMenuItem.Size = new System.Drawing.Size(105, 24); + this.сотрудникиToolStripMenuItem.Text = "Сотрудники"; + this.сотрудникиToolStripMenuItem.Click += new System.EventHandler(this.сотрудникиToolStripMenuItem_Click); + // + // должностиToolStripMenuItem + // + this.должностиToolStripMenuItem.Name = "должностиToolStripMenuItem"; + this.должностиToolStripMenuItem.Size = new System.Drawing.Size(101, 24); + this.должностиToolStripMenuItem.Text = "Должности"; + this.должностиToolStripMenuItem.Click += new System.EventHandler(this.должностиToolStripMenuItem_Click); + // + // назначитьНаЗаказToolStripMenuItem + // + this.назначитьНаЗаказToolStripMenuItem.Name = "назначитьНаЗаказToolStripMenuItem"; + this.назначитьНаЗаказToolStripMenuItem.Size = new System.Drawing.Size(159, 24); + this.назначитьНаЗаказToolStripMenuItem.Text = "Назначить на заказ"; + this.назначитьНаЗаказToolStripMenuItem.Click += new System.EventHandler(this.назначитьНаЗаказToolStripMenuItem_Click); + // + // FormBrigadeMenu + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackgroundImage = global::ConstructionCompanyView.Properties.Resources.users_viewfinder_solid; + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.ClientSize = new System.Drawing.Size(645, 352); + this.Controls.Add(this.menuStrip1); + this.DoubleBuffered = true; + this.MainMenuStrip = this.menuStrip1; + this.Name = "FormBrigadeMenu"; + this.Text = "Бригадир"; + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private MenuStrip menuStrip1; + private ToolStripMenuItem сотрудникиToolStripMenuItem; + private ToolStripMenuItem должностиToolStripMenuItem; + private ToolStripMenuItem назначитьНаЗаказToolStripMenuItem; + } +} \ No newline at end of file diff --git a/ConstructionCompany/ConstructionCompanyView/FormBrigadeMenu.cs b/ConstructionCompany/ConstructionCompanyView/FormBrigadeMenu.cs new file mode 100644 index 0000000..f552a65 --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormBrigadeMenu.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ConstructionCompanyView +{ + public partial class FormBrigadeMenu : Form + { + public FormBrigadeMenu() + { + InitializeComponent(); + } + + private void сотрудникиToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormEmployees)); + if (service is FormEmployees form) + { + form.ShowDialog(); + } + } + + private void назначитьНаЗаказToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormEmployeeOrders)); + if (service is FormEmployeeOrders form) + { + form.ShowDialog(); + } + } + + private void должностиToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormPositions)); + if (service is FormPositions form) + { + form.ShowDialog(); + } + } + } +} diff --git a/ConstructionCompany/ConstructionCompanyView/FormBrigadeMenu.resx b/ConstructionCompany/ConstructionCompanyView/FormBrigadeMenu.resx new file mode 100644 index 0000000..938108a --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormBrigadeMenu.resx @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/ConstructionCompany/ConstructionCompanyView/FormEmployee.Designer.cs b/ConstructionCompany/ConstructionCompanyView/FormEmployee.Designer.cs new file mode 100644 index 0000000..20d2501 --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormEmployee.Designer.cs @@ -0,0 +1,120 @@ +namespace ConstructionCompanyView +{ + partial class FormEmployee + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonCreate = new System.Windows.Forms.Button(); + this.textBoxName = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.comboBoxPosition = new System.Windows.Forms.ComboBox(); + this.SuspendLayout(); + // + // buttonCancel + // + this.buttonCancel.Location = new System.Drawing.Point(307, 117); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(94, 29); + this.buttonCancel.TabIndex = 9; + this.buttonCancel.Text = "Отмена"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // buttonCreate + // + this.buttonCreate.Location = new System.Drawing.Point(202, 117); + this.buttonCreate.Name = "buttonCreate"; + this.buttonCreate.Size = new System.Drawing.Size(94, 29); + this.buttonCreate.TabIndex = 8; + this.buttonCreate.Text = "Создать"; + this.buttonCreate.UseVisualStyleBackColor = true; + this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click); + // + // textBoxName + // + this.textBoxName.Location = new System.Drawing.Point(135, 6); + this.textBoxName.Name = "textBoxName"; + this.textBoxName.Size = new System.Drawing.Size(276, 27); + this.textBoxName.TabIndex = 7; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(42, 20); + this.label1.TabIndex = 6; + this.label1.Text = "ФИО"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 43); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(86, 20); + this.label2.TabIndex = 10; + this.label2.Text = "Должность"; + // + // comboBoxPosition + // + this.comboBoxPosition.FormattingEnabled = true; + this.comboBoxPosition.Location = new System.Drawing.Point(135, 40); + this.comboBoxPosition.Name = "comboBoxPosition"; + this.comboBoxPosition.Size = new System.Drawing.Size(276, 28); + this.comboBoxPosition.TabIndex = 11; + // + // FormEmployee + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(423, 165); + this.Controls.Add(this.comboBoxPosition); + this.Controls.Add(this.label2); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonCreate); + this.Controls.Add(this.textBoxName); + this.Controls.Add(this.label1); + this.Name = "FormEmployee"; + this.Text = "Сотрудник"; + this.Load += new System.EventHandler(this.FormEmployee_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Button buttonCancel; + private Button buttonCreate; + private TextBox textBoxName; + private Label label1; + private Label label2; + private ComboBox comboBoxPosition; + } +} \ No newline at end of file diff --git a/ConstructionCompany/ConstructionCompanyView/FormEmployee.cs b/ConstructionCompany/ConstructionCompanyView/FormEmployee.cs new file mode 100644 index 0000000..8c0d7ec --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormEmployee.cs @@ -0,0 +1,110 @@ +using ConstructionCompanyContracts.BindingModels; +using ConstructionCompanyContracts.BusinessLogicContracts; +using ConstructionCompanyContracts.SearchModels; +using ConstructionCompanyContracts.ViewModels; +using ConstructionCompanyPsqlImplement.Models; +using Microsoft.Extensions.Logging; +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ConstructionCompanyView +{ + public partial class FormEmployee : Form + { + private readonly ILogger _logger; + private readonly IPositionLogic _position; + private readonly IEmployeeLogic _employee; + private List? _list; + private int? _id; + public int Id { set { _id = value; } } + public FormEmployee(ILogger logger, IPositionLogic position, IEmployeeLogic employee) + { + InitializeComponent(); + _logger = logger; + _position = position; + _employee = employee; + } + + private void FormEmployee_Load(object sender, EventArgs e) + { + _logger.LogInformation("Загрузка материалов для заказа"); + _list = _position.ReadList(null); + if (_list != null) + { + comboBoxPosition.DisplayMember = "PositionName"; + comboBoxPosition.ValueMember = "Id"; + comboBoxPosition.DataSource = _list; + comboBoxPosition.SelectedItem = null; + } + if (_id.HasValue) + { + try + { + _logger.LogInformation("Получение материала"); + var view = _employee.ReadElement(new EmployeeSearchModel { Id = _id.Value }); + if (view != null) + { + textBoxName.Text = view.EmployeeName; + comboBoxPosition.SelectedValue = view.PositionID; + } + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка получения материала"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + private void buttonCreate_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(textBoxName.Text)) + { + MessageBox.Show("Заполните ФИО", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + if (comboBoxPosition.SelectedValue == null) + { + MessageBox.Show("Выбирете должность", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + _logger.LogInformation("Сохранение материала"); + try + { + var model = new EmployeeBindingModel + { + Id = _id ?? 0, + EmployeeName = textBoxName.Text, + PositionID = Convert.ToInt32(comboBoxPosition.SelectedValue) + }; + var operationResult = _id.HasValue ? _employee.Update(model) : _employee.Create(model); + if (!operationResult) + { + throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); + } + MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); + DialogResult = DialogResult.OK; + Close(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка сохранения компонента"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + Close(); + } + } +} diff --git a/ConstructionCompany/ConstructionCompanyView/FormEmployee.resx b/ConstructionCompany/ConstructionCompanyView/FormEmployee.resx new file mode 100644 index 0000000..f298a7b --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormEmployee.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/ConstructionCompany/ConstructionCompanyView/FormEmployeeOrder.Designer.cs b/ConstructionCompany/ConstructionCompanyView/FormEmployeeOrder.Designer.cs new file mode 100644 index 0000000..b1ca699 --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormEmployeeOrder.Designer.cs @@ -0,0 +1,121 @@ +namespace ConstructionCompanyView +{ + partial class FormEmployeeOrder + { + /// + /// 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.buttonCancel = new System.Windows.Forms.Button(); + this.buttonCreate = new System.Windows.Forms.Button(); + this.comboBoxOrder = new System.Windows.Forms.ComboBox(); + this.comboBoxEmployee = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // buttonCancel + // + this.buttonCancel.Location = new System.Drawing.Point(296, 115); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(94, 29); + this.buttonCancel.TabIndex = 13; + this.buttonCancel.Text = "Отмена"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // buttonCreate + // + this.buttonCreate.Location = new System.Drawing.Point(142, 115); + this.buttonCreate.Name = "buttonCreate"; + this.buttonCreate.Size = new System.Drawing.Size(94, 29); + this.buttonCreate.TabIndex = 12; + this.buttonCreate.Text = "Отправить"; + this.buttonCreate.UseVisualStyleBackColor = true; + this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click); + // + // comboBoxOrder + // + this.comboBoxOrder.FormattingEnabled = true; + this.comboBoxOrder.Location = new System.Drawing.Point(142, 9); + this.comboBoxOrder.Name = "comboBoxOrder"; + this.comboBoxOrder.Size = new System.Drawing.Size(248, 28); + this.comboBoxOrder.TabIndex = 11; + // + // comboBoxEmployee + // + this.comboBoxEmployee.FormattingEnabled = true; + this.comboBoxEmployee.Location = new System.Drawing.Point(142, 55); + this.comboBoxEmployee.Name = "comboBoxEmployee"; + this.comboBoxEmployee.Size = new System.Drawing.Size(248, 28); + this.comboBoxEmployee.TabIndex = 10; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 55); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(85, 20); + this.label2.TabIndex = 9; + this.label2.Text = "Сотрудник:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(50, 20); + this.label1.TabIndex = 8; + this.label1.Text = "Заказ:"; + // + // FormEmployeeOrder + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(436, 159); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonCreate); + this.Controls.Add(this.comboBoxOrder); + this.Controls.Add(this.comboBoxEmployee); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Name = "FormEmployeeOrder"; + this.Text = "Отправка на заказ"; + this.Load += new System.EventHandler(this.FormEmployeeOrder_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Button buttonCancel; + private Button buttonCreate; + private ComboBox comboBoxOrder; + private ComboBox comboBoxEmployee; + private Label label2; + private Label label1; + } +} \ No newline at end of file diff --git a/ConstructionCompany/ConstructionCompanyView/FormEmployeeOrder.cs b/ConstructionCompany/ConstructionCompanyView/FormEmployeeOrder.cs new file mode 100644 index 0000000..7753c6c --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormEmployeeOrder.cs @@ -0,0 +1,99 @@ +using ConstructionCompanyContracts.BindingModels; +using ConstructionCompanyContracts.BusinessLogicContracts; +using ConstructionCompanyContracts.SearchModels; +using ConstructionCompanyContracts.ViewModels; +using ConstructionCompanyPsqlImplement.Models; +using Microsoft.Extensions.Logging; +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ConstructionCompanyView +{ + public partial class FormEmployeeOrder : Form + { + private readonly ILogger _logger; + private readonly IOrderLogic _order; + private readonly IEmployeeLogic _employee; + private readonly IEmployeeOrderLogic _employeeOrder; + private List? _listE; + private List? _listO; + public FormEmployeeOrder(ILogger logger, IOrderLogic order, IEmployeeLogic employee, IEmployeeOrderLogic employeeOrder) + { + InitializeComponent(); + _logger = logger; + _order = order; + _employee = employee; + _employeeOrder = employeeOrder; + } + + private void FormEmployeeOrder_Load(object sender, EventArgs e) + { + _logger.LogInformation("Загрузка материалов для заказа"); + _listE = _employee.ReadList(null); + if (_listE != null) + { + comboBoxEmployee.DisplayMember = "EmployeeName"; + comboBoxEmployee.ValueMember = "Id"; + comboBoxEmployee.DataSource = _listE; + comboBoxEmployee.SelectedItem = null; + } + _listO = _order.ReadList(null); + if (_listO != null) + { + comboBoxOrder.DisplayMember = "Adress"; + comboBoxOrder.ValueMember = "Id"; + comboBoxOrder.DataSource = _listO; + comboBoxOrder.SelectedItem = null; + } + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + Close(); + } + + private void buttonCreate_Click(object sender, EventArgs e) + { + if (comboBoxOrder.SelectedValue == null) + { + MessageBox.Show("Выберите заказ", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + if (comboBoxEmployee.SelectedValue == null) + { + MessageBox.Show("Выберите материал", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + try + { + var model = new EmployeeOrderBindingModel + { + EmployeeId = Convert.ToInt32(comboBoxEmployee.SelectedValue), + OrderId = Convert.ToInt32(comboBoxOrder.SelectedValue), + }; + var operationResult = _employeeOrder.Create(model); + if (!operationResult) + { + throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); + } + MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); + DialogResult = DialogResult.OK; + Close(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка сохранения компонента"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/ConstructionCompany/ConstructionCompanyView/FormEmployeeOrder.resx b/ConstructionCompany/ConstructionCompanyView/FormEmployeeOrder.resx new file mode 100644 index 0000000..f298a7b --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormEmployeeOrder.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/ConstructionCompany/ConstructionCompanyView/FormEmployeeOrders.Designer.cs b/ConstructionCompany/ConstructionCompanyView/FormEmployeeOrders.Designer.cs new file mode 100644 index 0000000..c1d8699 --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormEmployeeOrders.Designer.cs @@ -0,0 +1,81 @@ +namespace ConstructionCompanyView +{ + partial class FormEmployeeOrders + { + /// + /// 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.buttonCreate = new System.Windows.Forms.Button(); + this.dataGridView = new System.Windows.Forms.DataGridView(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit(); + this.SuspendLayout(); + // + // buttonCreate + // + this.buttonCreate.Location = new System.Drawing.Point(604, 12); + this.buttonCreate.Name = "buttonCreate"; + this.buttonCreate.Size = new System.Drawing.Size(141, 75); + this.buttonCreate.TabIndex = 14; + this.buttonCreate.Text = "Отправить сотрудника на заказ"; + this.buttonCreate.UseVisualStyleBackColor = true; + this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click); + // + // dataGridView + // + this.dataGridView.BackgroundColor = System.Drawing.Color.White; + this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView.Dock = System.Windows.Forms.DockStyle.Left; + this.dataGridView.Location = new System.Drawing.Point(0, 0); + this.dataGridView.MultiSelect = false; + this.dataGridView.Name = "dataGridView"; + this.dataGridView.RowHeadersVisible = false; + this.dataGridView.RowHeadersWidth = 51; + this.dataGridView.RowTemplate.Height = 29; + this.dataGridView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dataGridView.Size = new System.Drawing.Size(543, 450); + this.dataGridView.TabIndex = 13; + // + // FormEmployeeOrders + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(768, 450); + this.Controls.Add(this.buttonCreate); + this.Controls.Add(this.dataGridView); + this.Name = "FormEmployeeOrders"; + this.Text = "Назначение сотрудников"; + this.Load += new System.EventHandler(this.FormEmployeeOrders_Load); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private Button buttonCreate; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/ConstructionCompany/ConstructionCompanyView/FormEmployeeOrders.cs b/ConstructionCompany/ConstructionCompanyView/FormEmployeeOrders.cs new file mode 100644 index 0000000..80e773a --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormEmployeeOrders.cs @@ -0,0 +1,64 @@ +using ConstructionCompanyContracts.BusinessLogicContracts; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ConstructionCompanyView +{ + public partial class FormEmployeeOrders : Form + { + private readonly ILogger _logger; + private readonly IEmployeeOrderLogic _logic; + public FormEmployeeOrders(ILogger logger, IEmployeeOrderLogic logic) + { + InitializeComponent(); + _logger = logger; + _logic = logic; + } + + private void FormEmployeeOrders_Load(object sender, EventArgs e) + { + LoadData(); + } + private void LoadData() + { + try + { + var list = _logic.ReadList(null); + if (list != null) + { + dataGridView.DataSource = list; + dataGridView.Columns["EmployeeId"].Visible = false; + dataGridView.Columns["OrderId"].Visible = false; + dataGridView.Columns["EmployeeName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + } + _logger.LogInformation("Загрузка поставок"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки поставок"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonCreate_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormEmployeeOrder)); + if (service is FormEmployeeOrder form) + { + if (form.ShowDialog() == DialogResult.OK) + { + LoadData(); + } + + } + } + } +} diff --git a/ConstructionCompany/ConstructionCompanyView/FormEmployeeOrders.resx b/ConstructionCompany/ConstructionCompanyView/FormEmployeeOrders.resx new file mode 100644 index 0000000..f298a7b --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormEmployeeOrders.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/ConstructionCompany/ConstructionCompanyView/FormEmployees.Designer.cs b/ConstructionCompany/ConstructionCompanyView/FormEmployees.Designer.cs new file mode 100644 index 0000000..22a30f4 --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormEmployees.Designer.cs @@ -0,0 +1,120 @@ +namespace ConstructionCompanyView +{ + partial class FormEmployees + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.buttonRef = new System.Windows.Forms.Button(); + this.buttonDel = new System.Windows.Forms.Button(); + this.buttonUpd = new System.Windows.Forms.Button(); + this.buttonAdd = new System.Windows.Forms.Button(); + this.dataGridView = new System.Windows.Forms.DataGridView(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit(); + this.SuspendLayout(); + // + // buttonRef + // + this.buttonRef.Location = new System.Drawing.Point(574, 186); + this.buttonRef.Name = "buttonRef"; + this.buttonRef.Size = new System.Drawing.Size(134, 29); + this.buttonRef.TabIndex = 14; + this.buttonRef.Text = "Обновить"; + this.buttonRef.UseVisualStyleBackColor = true; + this.buttonRef.Click += new System.EventHandler(this.buttonRef_Click); + // + // buttonDel + // + this.buttonDel.Location = new System.Drawing.Point(574, 128); + this.buttonDel.Name = "buttonDel"; + this.buttonDel.Size = new System.Drawing.Size(134, 29); + this.buttonDel.TabIndex = 13; + this.buttonDel.Text = "Уволить"; + this.buttonDel.UseVisualStyleBackColor = true; + this.buttonDel.Click += new System.EventHandler(this.buttonDel_Click); + // + // buttonUpd + // + this.buttonUpd.Location = new System.Drawing.Point(574, 71); + this.buttonUpd.Name = "buttonUpd"; + this.buttonUpd.Size = new System.Drawing.Size(134, 29); + this.buttonUpd.TabIndex = 12; + this.buttonUpd.Text = "Правка"; + this.buttonUpd.UseVisualStyleBackColor = true; + this.buttonUpd.Click += new System.EventHandler(this.buttonUpd_Click); + // + // buttonAdd + // + this.buttonAdd.Location = new System.Drawing.Point(574, 14); + this.buttonAdd.Name = "buttonAdd"; + this.buttonAdd.Size = new System.Drawing.Size(134, 29); + this.buttonAdd.TabIndex = 11; + this.buttonAdd.Text = "Нанять"; + this.buttonAdd.UseVisualStyleBackColor = true; + this.buttonAdd.Click += new System.EventHandler(this.buttonAdd_Click); + // + // dataGridView + // + this.dataGridView.BackgroundColor = System.Drawing.Color.White; + this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView.Dock = System.Windows.Forms.DockStyle.Left; + this.dataGridView.Location = new System.Drawing.Point(0, 0); + this.dataGridView.MultiSelect = false; + this.dataGridView.Name = "dataGridView"; + this.dataGridView.RowHeadersVisible = false; + this.dataGridView.RowHeadersWidth = 51; + this.dataGridView.RowTemplate.Height = 29; + this.dataGridView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dataGridView.Size = new System.Drawing.Size(489, 450); + this.dataGridView.TabIndex = 10; + // + // FormEmployees + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(723, 450); + this.Controls.Add(this.buttonRef); + this.Controls.Add(this.buttonDel); + this.Controls.Add(this.buttonUpd); + this.Controls.Add(this.buttonAdd); + this.Controls.Add(this.dataGridView); + this.Name = "FormEmployees"; + this.Text = "Сотрудники"; + this.Load += new System.EventHandler(this.FormEmployees_Load); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private Button buttonRef; + private Button buttonDel; + private Button buttonUpd; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/ConstructionCompany/ConstructionCompanyView/FormEmployees.cs b/ConstructionCompany/ConstructionCompanyView/FormEmployees.cs new file mode 100644 index 0000000..1859462 --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormEmployees.cs @@ -0,0 +1,111 @@ +using ConstructionCompanyContracts.BindingModels; +using ConstructionCompanyContracts.BusinessLogicContracts; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ConstructionCompanyView +{ + public partial class FormEmployees : Form + { + private readonly ILogger _logger; + private readonly IEmployeeLogic _logic; + public FormEmployees(ILogger logger, IEmployeeLogic logic) + { + InitializeComponent(); + _logger = logger; + _logic = logic; + } + + private void FormEmployees_Load(object sender, EventArgs e) + { + LoadData(); + } + + private void buttonAdd_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormEmployee)); + if (service is FormEmployee form) + { + if (form.ShowDialog() == DialogResult.OK) + { + LoadData(); + } + } + } + + private void buttonUpd_Click(object sender, EventArgs e) + { + if (dataGridView.SelectedRows.Count == 1) + { + var service = Program.ServiceProvider?.GetService(typeof(FormEmployee)); + if (service is FormEmployee form) + { + form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + if (form.ShowDialog() == DialogResult.OK) + { + LoadData(); + } + } + } + } + + private void buttonDel_Click(object sender, EventArgs e) + { + if (dataGridView.SelectedRows.Count == 1) + { + if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + { + int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + _logger.LogInformation("Удаление изделия"); + try + { + if (!_logic.Delete(new EmployeeBindingModel { Id = id })) + { + throw new Exception("Ошибка при удалении. Дополнительная информация в логах."); + } + LoadData(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка удаления изделия"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + } + + private void buttonRef_Click(object sender, EventArgs e) + { + LoadData(); + } + + private void LoadData() + { + try + { + var list = _logic.ReadList(null); + if (list != null) + { + dataGridView.DataSource = list; + dataGridView.Columns["Id"].Visible = false; + dataGridView.Columns["PositionId"].Visible = false; + dataGridView.Columns["EmployeeName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + } + _logger.LogInformation("Загрузка материалов"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки материалов"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/ConstructionCompany/ConstructionCompanyView/FormEmployees.resx b/ConstructionCompany/ConstructionCompanyView/FormEmployees.resx new file mode 100644 index 0000000..f298a7b --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormEmployees.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/ConstructionCompany/ConstructionCompanyView/FormLogin.Designer.cs b/ConstructionCompany/ConstructionCompanyView/FormLogin.Designer.cs new file mode 100644 index 0000000..9445ede --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormLogin.Designer.cs @@ -0,0 +1,101 @@ +namespace ConstructionCompanyView +{ + partial class FormLogin + { + /// + /// 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.label1 = new System.Windows.Forms.Label(); + this.buttonWarehouse = new System.Windows.Forms.Button(); + this.buttonManager = new System.Windows.Forms.Button(); + this.buttonHR = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Segoe UI", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.label1.Location = new System.Drawing.Point(318, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(128, 32); + this.label1.TabIndex = 0; + this.label1.Text = "Войти как:"; + // + // buttonWarehouse + // + this.buttonWarehouse.Location = new System.Drawing.Point(33, 130); + this.buttonWarehouse.Name = "buttonWarehouse"; + this.buttonWarehouse.Size = new System.Drawing.Size(174, 61); + this.buttonWarehouse.TabIndex = 1; + this.buttonWarehouse.Text = "Кладовщик"; + this.buttonWarehouse.UseVisualStyleBackColor = true; + this.buttonWarehouse.Click += new System.EventHandler(this.buttonWarehouse_Click); + // + // buttonManager + // + this.buttonManager.Location = new System.Drawing.Point(299, 130); + this.buttonManager.Name = "buttonManager"; + this.buttonManager.Size = new System.Drawing.Size(174, 61); + this.buttonManager.TabIndex = 2; + this.buttonManager.Text = "Менеджер"; + this.buttonManager.UseVisualStyleBackColor = true; + this.buttonManager.Click += new System.EventHandler(this.buttonManager_Click); + // + // buttonHR + // + this.buttonHR.Location = new System.Drawing.Point(579, 130); + this.buttonHR.Name = "buttonHR"; + this.buttonHR.Size = new System.Drawing.Size(174, 61); + this.buttonHR.TabIndex = 3; + this.buttonHR.Text = "Бригадир"; + this.buttonHR.UseVisualStyleBackColor = true; + this.buttonHR.Click += new System.EventHandler(this.buttonHR_Click); + // + // FormLogin + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.ActiveCaption; + this.ClientSize = new System.Drawing.Size(784, 350); + this.Controls.Add(this.buttonHR); + this.Controls.Add(this.buttonManager); + this.Controls.Add(this.buttonWarehouse); + this.Controls.Add(this.label1); + this.Name = "FormLogin"; + this.Text = "Вход"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Label label1; + private Button buttonWarehouse; + private Button buttonManager; + private Button buttonHR; + } +} \ No newline at end of file diff --git a/ConstructionCompany/ConstructionCompanyView/FormLogin.cs b/ConstructionCompany/ConstructionCompanyView/FormLogin.cs new file mode 100644 index 0000000..6b7527c --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormLogin.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ConstructionCompanyView +{ + public partial class FormLogin : Form + { + public FormLogin() + { + InitializeComponent(); + } + + private void buttonWarehouse_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormWarehouseMenu)); + if (service is FormWarehouseMenu form) + { + this.Hide(); + form.ShowDialog(); + this.Show(); + } + } + + private void buttonManager_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormManagerMenu)); + if (service is FormManagerMenu form) + { + this.Hide(); + form.ShowDialog(); + this.Show(); + } + } + + private void buttonHR_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormBrigadeMenu)); + if (service is FormBrigadeMenu form) + { + this.Hide(); + form.ShowDialog(); + this.Show(); + } + } + } +} diff --git a/ConstructionCompany/ConstructionCompanyView/FormLogin.resx b/ConstructionCompany/ConstructionCompanyView/FormLogin.resx new file mode 100644 index 0000000..f298a7b --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormLogin.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/ConstructionCompany/ConstructionCompanyView/FormManagerMenu.Designer.cs b/ConstructionCompany/ConstructionCompanyView/FormManagerMenu.Designer.cs new file mode 100644 index 0000000..931f65c --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormManagerMenu.Designer.cs @@ -0,0 +1,78 @@ +namespace ConstructionCompanyView +{ + partial class FormManagerMenu + { + /// + /// 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.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.заказыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // menuStrip1 + // + this.menuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.заказыToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(626, 28); + this.menuStrip1.TabIndex = 0; + this.menuStrip1.Text = "menuStrip1"; + // + // заказыToolStripMenuItem + // + this.заказыToolStripMenuItem.Name = "заказыToolStripMenuItem"; + this.заказыToolStripMenuItem.Size = new System.Drawing.Size(72, 24); + this.заказыToolStripMenuItem.Text = "Заказы"; + this.заказыToolStripMenuItem.Click += new System.EventHandler(this.заказыToolStripMenuItem_Click); + // + // FormManagerMenu + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackgroundImage = global::ConstructionCompanyView.Properties.Resources.cash_register_solid; + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.ClientSize = new System.Drawing.Size(626, 328); + this.Controls.Add(this.menuStrip1); + this.DoubleBuffered = true; + this.MainMenuStrip = this.menuStrip1; + this.Name = "FormManagerMenu"; + this.Text = "Менеджмент"; + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private MenuStrip menuStrip1; + private ToolStripMenuItem заказыToolStripMenuItem; + } +} \ No newline at end of file diff --git a/ConstructionCompany/ConstructionCompanyView/FormManagerMenu.cs b/ConstructionCompany/ConstructionCompanyView/FormManagerMenu.cs new file mode 100644 index 0000000..45705ec --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormManagerMenu.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ConstructionCompanyView +{ + public partial class FormManagerMenu : Form + { + public FormManagerMenu() + { + InitializeComponent(); + } + + private void заказыToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormOrders)); + if (service is FormOrders form) + { + form.ShowDialog(); + } + } + } +} diff --git a/ConstructionCompany/ConstructionCompanyView/FormManagerMenu.resx b/ConstructionCompany/ConstructionCompanyView/FormManagerMenu.resx new file mode 100644 index 0000000..3f6299f --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormManagerMenu.resx @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 82 + + \ No newline at end of file diff --git a/ConstructionCompany/ConstructionCompanyView/FormMaterial.cs b/ConstructionCompany/ConstructionCompanyView/FormMaterial.cs index 258637d..cb53eff 100644 --- a/ConstructionCompany/ConstructionCompanyView/FormMaterial.cs +++ b/ConstructionCompany/ConstructionCompanyView/FormMaterial.cs @@ -83,6 +83,7 @@ namespace ConstructionCompanyView { textBoxName.Text = view.MaterialName; textBoxQuantity.Text = view.Quantity.ToString(); + textBoxQuantity.Enabled = false; } } catch (Exception ex) diff --git a/ConstructionCompany/ConstructionCompanyView/FormMaterialOrder.Designer.cs b/ConstructionCompany/ConstructionCompanyView/FormMaterialOrder.Designer.cs new file mode 100644 index 0000000..e2ac233 --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormMaterialOrder.Designer.cs @@ -0,0 +1,156 @@ +namespace ConstructionCompanyView +{ + partial class FormMaterialOrder + { + /// + /// 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.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.comboBoxMaterial = new System.Windows.Forms.ComboBox(); + this.textBoxQuantity = new System.Windows.Forms.TextBox(); + this.comboBoxOrder = new System.Windows.Forms.ComboBox(); + this.buttonCreate = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.labelQuantity = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(50, 20); + this.label1.TabIndex = 0; + this.label1.Text = "Заказ:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 55); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(81, 20); + this.label2.TabIndex = 1; + this.label2.Text = "Материал:"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(12, 138); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(93, 20); + this.label3.TabIndex = 2; + this.label3.Text = "Количество:"; + // + // comboBoxMaterial + // + this.comboBoxMaterial.FormattingEnabled = true; + this.comboBoxMaterial.Location = new System.Drawing.Point(142, 55); + this.comboBoxMaterial.Name = "comboBoxMaterial"; + this.comboBoxMaterial.Size = new System.Drawing.Size(248, 28); + this.comboBoxMaterial.TabIndex = 3; + this.comboBoxMaterial.SelectedValueChanged += new System.EventHandler(this.comboBoxMaterial_SelectedValueChanged); + // + // textBoxQuantity + // + this.textBoxQuantity.Location = new System.Drawing.Point(142, 135); + this.textBoxQuantity.Name = "textBoxQuantity"; + this.textBoxQuantity.Size = new System.Drawing.Size(120, 27); + this.textBoxQuantity.TabIndex = 4; + // + // comboBoxOrder + // + this.comboBoxOrder.FormattingEnabled = true; + this.comboBoxOrder.Location = new System.Drawing.Point(142, 9); + this.comboBoxOrder.Name = "comboBoxOrder"; + this.comboBoxOrder.Size = new System.Drawing.Size(248, 28); + this.comboBoxOrder.TabIndex = 5; + // + // buttonCreate + // + this.buttonCreate.Location = new System.Drawing.Point(142, 194); + this.buttonCreate.Name = "buttonCreate"; + this.buttonCreate.Size = new System.Drawing.Size(94, 29); + this.buttonCreate.TabIndex = 6; + this.buttonCreate.Text = "Добавить"; + this.buttonCreate.UseVisualStyleBackColor = true; + this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click); + // + // buttonCancel + // + this.buttonCancel.Location = new System.Drawing.Point(296, 194); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(94, 29); + this.buttonCancel.TabIndex = 7; + this.buttonCancel.Text = "Отмена"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // labelQuantity + // + this.labelQuantity.AutoSize = true; + this.labelQuantity.Location = new System.Drawing.Point(12, 95); + this.labelQuantity.Name = "labelQuantity"; + this.labelQuantity.Size = new System.Drawing.Size(134, 20); + this.labelQuantity.TabIndex = 8; + this.labelQuantity.Text = "Едениц на складе:"; + // + // FormMaterialOrder + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(408, 233); + this.Controls.Add(this.labelQuantity); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonCreate); + this.Controls.Add(this.comboBoxOrder); + this.Controls.Add(this.textBoxQuantity); + this.Controls.Add(this.comboBoxMaterial); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Name = "FormMaterialOrder"; + this.Text = "Отправка материалов на заказ"; + this.Load += new System.EventHandler(this.FormMaterialOrder_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Label label1; + private Label label2; + private Label label3; + private ComboBox comboBoxMaterial; + private TextBox textBoxQuantity; + private ComboBox comboBoxOrder; + private Button buttonCreate; + private Button buttonCancel; + private Label labelQuantity; + } +} \ No newline at end of file diff --git a/ConstructionCompany/ConstructionCompanyView/FormMaterialOrder.cs b/ConstructionCompany/ConstructionCompanyView/FormMaterialOrder.cs new file mode 100644 index 0000000..b4ece52 --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormMaterialOrder.cs @@ -0,0 +1,128 @@ +using ConstructionCompanyContracts.BusinessLogicContracts; +using ConstructionCompanyContracts.ViewModels; +using ConstructionCompanyContracts.BindingModels; +using ConstructionCompanyContracts.SearchModels; +using Microsoft.Extensions.Logging; +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ConstructionCompanyView +{ + public partial class FormMaterialOrder : Form + { + private readonly ILogger _logger; + private readonly IOrderLogic _order; + private readonly IMaterialLogic _material; + private readonly IMaterialOrderLogic _materialOrder; + private List? _listM; + private List? _listO; + private int _quantity = -1; + public FormMaterialOrder(ILogger logger, IOrderLogic order, IMaterialLogic material, IMaterialOrderLogic materialOrder) + { + InitializeComponent(); + _logger = logger; + _order = order; + _material = material; + _materialOrder = materialOrder; + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + Close(); + } + + private void buttonCreate_Click(object sender, EventArgs e) + { + if (comboBoxOrder.SelectedValue == null) + { + MessageBox.Show("Выберите заказ", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + if (comboBoxMaterial.SelectedValue == null) + { + MessageBox.Show("Выберите материал", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + if (string.IsNullOrEmpty(textBoxQuantity.Text)) + { + MessageBox.Show("Заполните количество", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + if (Convert.ToInt32(textBoxQuantity.Text) > _quantity) + { + MessageBox.Show("На складе столько нет!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + try + { + var model = new MaterialOrderBindingModel + { + MaterialId = Convert.ToInt32(comboBoxMaterial.SelectedValue), + OrderId = Convert.ToInt32(comboBoxOrder.SelectedValue), + Quantity = Convert.ToInt32(textBoxQuantity.Text) + }; + var operationResult = _materialOrder.Create(model); + if (!operationResult) + { + throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); + } + MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); + var material = _material.ReadElement(new MaterialSearchModel { Id = Convert.ToInt32(comboBoxMaterial.SelectedValue) }); + material.Quantity -= Convert.ToInt32(textBoxQuantity.Text); + _material.Update(new MaterialBindingModel { Id = material.Id, MaterialName = material.MaterialName, Quantity = material.Quantity }); + DialogResult = DialogResult.OK; + Close(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка сохранения компонента"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void FormMaterialOrder_Load(object sender, EventArgs e) + { + _logger.LogInformation("Загрузка материалов для заказа"); + _listM = _material.ReadList(null); + if (_listM != null) + { + comboBoxMaterial.DisplayMember = "MaterialName"; + comboBoxMaterial.ValueMember = "Id"; + comboBoxMaterial.DataSource = _listM; + comboBoxMaterial.SelectedItem = null; + } + _listO = _order.ReadList(null); + if (_listO != null) + { + comboBoxOrder.DisplayMember = "Adress"; + comboBoxOrder.ValueMember = "Id"; + comboBoxOrder.DataSource = _listO; + comboBoxOrder.SelectedItem = null; + } + } + + private void comboBoxMaterial_SelectedValueChanged(object sender, EventArgs e) + { + if (comboBoxMaterial.SelectedValue == null) + { + labelQuantity.Text = "Единиц на складе: "; + _quantity = -1; + } + else + { + var quantity = _material.ReadElement(new MaterialSearchModel { Id = Convert.ToInt32(comboBoxMaterial.SelectedValue) })?.Quantity; + labelQuantity.Text = $"Единиц на складе: {(quantity.HasValue ? quantity.Value : "")}"; + _quantity = quantity.HasValue ? quantity.Value : -1; + } + } + } +} diff --git a/ConstructionCompany/ConstructionCompanyView/FormMaterialOrder.resx b/ConstructionCompany/ConstructionCompanyView/FormMaterialOrder.resx new file mode 100644 index 0000000..f298a7b --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormMaterialOrder.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/ConstructionCompany/ConstructionCompanyView/FormMaterialOrders.Designer.cs b/ConstructionCompany/ConstructionCompanyView/FormMaterialOrders.Designer.cs new file mode 100644 index 0000000..eabd2bb --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormMaterialOrders.Designer.cs @@ -0,0 +1,81 @@ +namespace ConstructionCompanyView +{ + partial class FormMaterialOrders + { + /// + /// 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.dataGridView = new System.Windows.Forms.DataGridView(); + this.buttonCreate = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit(); + this.SuspendLayout(); + // + // dataGridView + // + this.dataGridView.BackgroundColor = System.Drawing.Color.White; + this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView.Dock = System.Windows.Forms.DockStyle.Left; + this.dataGridView.Location = new System.Drawing.Point(0, 0); + this.dataGridView.MultiSelect = false; + this.dataGridView.Name = "dataGridView"; + this.dataGridView.RowHeadersVisible = false; + this.dataGridView.RowHeadersWidth = 51; + this.dataGridView.RowTemplate.Height = 29; + this.dataGridView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dataGridView.Size = new System.Drawing.Size(543, 450); + this.dataGridView.TabIndex = 11; + // + // buttonCreate + // + this.buttonCreate.Location = new System.Drawing.Point(549, 12); + this.buttonCreate.Name = "buttonCreate"; + this.buttonCreate.Size = new System.Drawing.Size(141, 64); + this.buttonCreate.TabIndex = 12; + this.buttonCreate.Text = "Отправить материалы"; + this.buttonCreate.UseVisualStyleBackColor = true; + this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click); + // + // FormMaterialOrders + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(702, 450); + this.Controls.Add(this.buttonCreate); + this.Controls.Add(this.dataGridView); + this.Name = "FormMaterialOrders"; + this.Text = "Отправленные материалы"; + this.Load += new System.EventHandler(this.FormMaterialOrders_Load); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private DataGridView dataGridView; + private Button buttonCreate; + } +} \ No newline at end of file diff --git a/ConstructionCompany/ConstructionCompanyView/FormMaterialOrders.cs b/ConstructionCompany/ConstructionCompanyView/FormMaterialOrders.cs new file mode 100644 index 0000000..a2c60f8 --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormMaterialOrders.cs @@ -0,0 +1,67 @@ +using ConstructionCompanyContracts.BusinessLogicContracts; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ConstructionCompanyView +{ + public partial class FormMaterialOrders : Form + { + private readonly ILogger _logger; + private readonly IMaterialOrderLogic _logic; + + public FormMaterialOrders(ILogger logger, IMaterialOrderLogic logic) + { + InitializeComponent(); + _logger = logger; + _logic = logic; + } + + private void FormMaterialOrders_Load(object sender, EventArgs e) + { + LoadData(); + } + + private void LoadData() + { + try + { + var list = _logic.ReadList(null); + if (list != null) + { + dataGridView.DataSource = list; + dataGridView.Columns["MaterialId"].Visible = false; + dataGridView.Columns["OrderId"].Visible = false; + dataGridView.Columns["Quantity"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + } + _logger.LogInformation("Загрузка поставок"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки поставок"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonCreate_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormMaterialOrder)); + if (service is FormMaterialOrder form) + { + if (form.ShowDialog() == DialogResult.OK) + { + LoadData(); + } + + } + } + } +} diff --git a/ConstructionCompany/ConstructionCompanyView/FormMaterialOrders.resx b/ConstructionCompany/ConstructionCompanyView/FormMaterialOrders.resx new file mode 100644 index 0000000..f298a7b --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormMaterialOrders.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/ConstructionCompany/ConstructionCompanyView/FormMaterials.Designer.cs b/ConstructionCompany/ConstructionCompanyView/FormMaterials.Designer.cs index 9d43574..ffbcc05 100644 --- a/ConstructionCompany/ConstructionCompanyView/FormMaterials.Designer.cs +++ b/ConstructionCompany/ConstructionCompanyView/FormMaterials.Designer.cs @@ -38,9 +38,9 @@ // // buttonRef // - this.buttonRef.Location = new System.Drawing.Point(523, 186); + this.buttonRef.Location = new System.Drawing.Point(495, 186); this.buttonRef.Name = "buttonRef"; - this.buttonRef.Size = new System.Drawing.Size(94, 29); + this.buttonRef.Size = new System.Drawing.Size(134, 29); this.buttonRef.TabIndex = 9; this.buttonRef.Text = "Обновить"; this.buttonRef.UseVisualStyleBackColor = true; @@ -48,19 +48,19 @@ // // buttonDel // - this.buttonDel.Location = new System.Drawing.Point(523, 128); + this.buttonDel.Location = new System.Drawing.Point(495, 128); this.buttonDel.Name = "buttonDel"; - this.buttonDel.Size = new System.Drawing.Size(94, 29); + this.buttonDel.Size = new System.Drawing.Size(134, 29); this.buttonDel.TabIndex = 8; - this.buttonDel.Text = "Удалить"; + this.buttonDel.Text = "Списать"; this.buttonDel.UseVisualStyleBackColor = true; this.buttonDel.Click += new System.EventHandler(this.buttonDel_Click); // // buttonUpd // - this.buttonUpd.Location = new System.Drawing.Point(523, 71); + this.buttonUpd.Location = new System.Drawing.Point(495, 71); this.buttonUpd.Name = "buttonUpd"; - this.buttonUpd.Size = new System.Drawing.Size(94, 29); + this.buttonUpd.Size = new System.Drawing.Size(134, 29); this.buttonUpd.TabIndex = 7; this.buttonUpd.Text = "Изменить"; this.buttonUpd.UseVisualStyleBackColor = true; @@ -68,11 +68,11 @@ // // buttonAdd // - this.buttonAdd.Location = new System.Drawing.Point(523, 14); + this.buttonAdd.Location = new System.Drawing.Point(495, 14); this.buttonAdd.Name = "buttonAdd"; - this.buttonAdd.Size = new System.Drawing.Size(94, 29); + this.buttonAdd.Size = new System.Drawing.Size(134, 29); this.buttonAdd.TabIndex = 6; - this.buttonAdd.Text = "Добавить"; + this.buttonAdd.Text = "Приемка"; this.buttonAdd.UseVisualStyleBackColor = true; this.buttonAdd.Click += new System.EventHandler(this.buttonAdd_Click); // diff --git a/ConstructionCompany/ConstructionCompanyView/FormOrder.Designer.cs b/ConstructionCompany/ConstructionCompanyView/FormOrder.Designer.cs new file mode 100644 index 0000000..1b1dbaf --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormOrder.Designer.cs @@ -0,0 +1,163 @@ +namespace ConstructionCompanyView +{ + partial class FormOrder + { + /// + /// 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.label1 = new System.Windows.Forms.Label(); + this.textBoxDescription = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.textBoxAdress = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.textBoxPrice = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.textBoxNumber = new System.Windows.Forms.TextBox(); + this.buttonCreate = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(79, 20); + this.label1.TabIndex = 0; + this.label1.Text = "Описание"; + // + // textBoxDescription + // + this.textBoxDescription.Location = new System.Drawing.Point(183, 6); + this.textBoxDescription.Multiline = true; + this.textBoxDescription.Name = "textBoxDescription"; + this.textBoxDescription.Size = new System.Drawing.Size(266, 56); + this.textBoxDescription.TabIndex = 1; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 76); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(51, 20); + this.label2.TabIndex = 2; + this.label2.Text = "Адрес"; + // + // textBoxAdress + // + this.textBoxAdress.Location = new System.Drawing.Point(183, 73); + this.textBoxAdress.Name = "textBoxAdress"; + this.textBoxAdress.Size = new System.Drawing.Size(266, 27); + this.textBoxAdress.TabIndex = 3; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(12, 114); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(45, 20); + this.label3.TabIndex = 4; + this.label3.Text = "Цена"; + // + // textBoxPrice + // + this.textBoxPrice.Location = new System.Drawing.Point(183, 111); + this.textBoxPrice.Name = "textBoxPrice"; + this.textBoxPrice.Size = new System.Drawing.Size(266, 27); + this.textBoxPrice.TabIndex = 5; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(12, 146); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(130, 20); + this.label4.TabIndex = 6; + this.label4.Text = "Номер заказчика"; + // + // textBoxNumber + // + this.textBoxNumber.Location = new System.Drawing.Point(183, 144); + this.textBoxNumber.Name = "textBoxNumber"; + this.textBoxNumber.Size = new System.Drawing.Size(266, 27); + this.textBoxNumber.TabIndex = 7; + // + // buttonCreate + // + this.buttonCreate.Location = new System.Drawing.Point(213, 186); + this.buttonCreate.Name = "buttonCreate"; + this.buttonCreate.Size = new System.Drawing.Size(94, 29); + this.buttonCreate.TabIndex = 8; + this.buttonCreate.Text = "Принять"; + this.buttonCreate.UseVisualStyleBackColor = true; + this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click); + // + // buttonCancel + // + this.buttonCancel.Location = new System.Drawing.Point(342, 186); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(94, 29); + this.buttonCancel.TabIndex = 9; + this.buttonCancel.Text = "Отмена"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // FormOrder + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(461, 227); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonCreate); + this.Controls.Add(this.textBoxNumber); + this.Controls.Add(this.label4); + this.Controls.Add(this.textBoxPrice); + this.Controls.Add(this.label3); + this.Controls.Add(this.textBoxAdress); + this.Controls.Add(this.label2); + this.Controls.Add(this.textBoxDescription); + this.Controls.Add(this.label1); + this.Name = "FormOrder"; + this.Text = "Создание заказа"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Label label1; + private TextBox textBoxDescription; + private Label label2; + private TextBox textBoxAdress; + private Label label3; + private TextBox textBoxPrice; + private Label label4; + private TextBox textBoxNumber; + private Button buttonCreate; + private Button buttonCancel; + } +} \ No newline at end of file diff --git a/ConstructionCompany/ConstructionCompanyView/FormOrder.cs b/ConstructionCompany/ConstructionCompanyView/FormOrder.cs new file mode 100644 index 0000000..145f17c --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormOrder.cs @@ -0,0 +1,82 @@ +using ConstructionCompanyContracts.BindingModels; +using ConstructionCompanyContracts.BusinessLogicContracts; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ConstructionCompanyView +{ + public partial class FormOrder : Form + { + private readonly ILogger _logger; + private readonly IOrderLogic _logic; + public FormOrder(ILogger logger, IOrderLogic logic) + { + InitializeComponent(); + _logger = logger; + _logic = logic; + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + Close(); + } + + private void buttonCreate_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(textBoxDescription.Text)) + { + MessageBox.Show("Заполните описание", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + if (string.IsNullOrEmpty(textBoxAdress.Text)) + { + MessageBox.Show("Заполните адрес", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + if (string.IsNullOrEmpty(textBoxPrice.Text)) + { + MessageBox.Show("Заполните цену", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + if (string.IsNullOrEmpty(textBoxNumber.Text)) + { + MessageBox.Show("Заполните цену", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + _logger.LogInformation("Сохранение материала"); + try + { + var model = new OrderBindingModel + { + Id = 0, + Description = textBoxDescription.Text, + Adress = textBoxAdress.Text, + Price = Convert.ToInt32(textBoxPrice.Text), + CustomerNumber = textBoxNumber.Text + }; + var operationResult = _logic.CreateOrder(model); + if (!operationResult) + { + throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); + } + MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); + DialogResult = DialogResult.OK; + Close(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка сохранения компонента"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/ConstructionCompany/ConstructionCompanyView/FormOrder.resx b/ConstructionCompany/ConstructionCompanyView/FormOrder.resx new file mode 100644 index 0000000..f298a7b --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormOrder.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/ConstructionCompany/ConstructionCompanyView/FormOrders.Designer.cs b/ConstructionCompany/ConstructionCompanyView/FormOrders.Designer.cs new file mode 100644 index 0000000..c4d3b5e --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormOrders.Designer.cs @@ -0,0 +1,119 @@ +namespace ConstructionCompanyView +{ + partial class FormOrders + { + /// + /// 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.buttonRef = new System.Windows.Forms.Button(); + this.buttonDone = new System.Windows.Forms.Button(); + this.buttonTakeInWork = new System.Windows.Forms.Button(); + this.buttonAdd = new System.Windows.Forms.Button(); + this.dataGridView = new System.Windows.Forms.DataGridView(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit(); + this.SuspendLayout(); + // + // buttonRef + // + this.buttonRef.Location = new System.Drawing.Point(1236, 207); + this.buttonRef.Name = "buttonRef"; + this.buttonRef.Size = new System.Drawing.Size(157, 29); + this.buttonRef.TabIndex = 14; + this.buttonRef.Text = "Обновить"; + this.buttonRef.UseVisualStyleBackColor = true; + // + // buttonDone + // + this.buttonDone.Location = new System.Drawing.Point(1236, 138); + this.buttonDone.Name = "buttonDone"; + this.buttonDone.Size = new System.Drawing.Size(157, 29); + this.buttonDone.TabIndex = 13; + this.buttonDone.Text = "Заказ готов "; + this.buttonDone.UseVisualStyleBackColor = true; + this.buttonDone.Click += new System.EventHandler(this.buttonDone_Click); + // + // buttonTakeInWork + // + this.buttonTakeInWork.Location = new System.Drawing.Point(1236, 73); + this.buttonTakeInWork.Name = "buttonTakeInWork"; + this.buttonTakeInWork.Size = new System.Drawing.Size(157, 30); + this.buttonTakeInWork.TabIndex = 12; + this.buttonTakeInWork.Text = "Перевести в работу"; + this.buttonTakeInWork.UseVisualStyleBackColor = true; + this.buttonTakeInWork.Click += new System.EventHandler(this.buttonTakeInWork_Click); + // + // buttonAdd + // + this.buttonAdd.Location = new System.Drawing.Point(1236, 11); + this.buttonAdd.Name = "buttonAdd"; + this.buttonAdd.Size = new System.Drawing.Size(157, 29); + this.buttonAdd.TabIndex = 11; + this.buttonAdd.Text = "Принять заказ"; + this.buttonAdd.UseVisualStyleBackColor = true; + this.buttonAdd.Click += new System.EventHandler(this.buttonAdd_Click); + // + // dataGridView + // + this.dataGridView.BackgroundColor = System.Drawing.Color.White; + this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView.Dock = System.Windows.Forms.DockStyle.Left; + this.dataGridView.Location = new System.Drawing.Point(0, 0); + this.dataGridView.MultiSelect = false; + this.dataGridView.Name = "dataGridView"; + this.dataGridView.RowHeadersVisible = false; + this.dataGridView.RowHeadersWidth = 51; + this.dataGridView.RowTemplate.Height = 29; + this.dataGridView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dataGridView.Size = new System.Drawing.Size(1193, 450); + this.dataGridView.TabIndex = 10; + // + // FormOrders + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1405, 450); + this.Controls.Add(this.buttonRef); + this.Controls.Add(this.buttonDone); + this.Controls.Add(this.buttonTakeInWork); + this.Controls.Add(this.buttonAdd); + this.Controls.Add(this.dataGridView); + this.Name = "FormOrders"; + this.Text = "Заказы"; + this.Load += new System.EventHandler(this.FormOrders_Load); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private Button buttonRef; + private Button buttonDone; + private Button buttonTakeInWork; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/ConstructionCompany/ConstructionCompanyView/FormOrders.cs b/ConstructionCompany/ConstructionCompanyView/FormOrders.cs new file mode 100644 index 0000000..e9f65d9 --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormOrders.cs @@ -0,0 +1,110 @@ +using ConstructionCompanyBusinessLogic.BusinessLogics; +using ConstructionCompanyContracts.BindingModels; +using ConstructionCompanyContracts.BusinessLogicContracts; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ConstructionCompanyView +{ + public partial class FormOrders : Form + { + private readonly ILogger _logger; + private readonly IOrderLogic _logic; + public FormOrders(ILogger logger, IOrderLogic logic) + { + InitializeComponent(); + _logger = logger; + _logic = logic; + } + + private void buttonAdd_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormOrder)); + if (service is FormOrder form) + { + if (form.ShowDialog() == DialogResult.OK) + { + LoadData(); + } + } + } + + private void FormOrders_Load(object sender, EventArgs e) + { + LoadData(); + } + + private void LoadData() + { + try + { + var list = _logic.ReadList(null); + if (list != null) + { + dataGridView.DataSource = list; + dataGridView.Columns["Description"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + } + _logger.LogInformation("Загрузка заказов"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки заказов"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonTakeInWork_Click(object sender, EventArgs e) + { + if (dataGridView.SelectedRows.Count == 1) + { + int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + _logger.LogInformation("Заказ №{id}. Меняется статус на 'В работе'", id); + try + { + var operationResult = _logic.TakeOrderInWork(new OrderBindingModel { Id = id }); + if (!operationResult) + { + throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); + } + LoadData(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка передачи заказа в работу"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + private void buttonDone_Click(object sender, EventArgs e) + { + if (dataGridView.SelectedRows.Count == 1) + { + int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + _logger.LogInformation("Заказ №{id}. Меняется статус на 'Готов'", id); + try + { + var operationResult = _logic.FinishOrder(new OrderBindingModel { Id = id }); + if (!operationResult) + { + throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); + } + LoadData(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка отметки о готовности заказа"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + } +} diff --git a/ConstructionCompany/ConstructionCompanyView/FormOrders.resx b/ConstructionCompany/ConstructionCompanyView/FormOrders.resx new file mode 100644 index 0000000..f298a7b --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormOrders.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/ConstructionCompany/ConstructionCompanyView/FormPosition.Designer.cs b/ConstructionCompany/ConstructionCompanyView/FormPosition.Designer.cs new file mode 100644 index 0000000..151d055 --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormPosition.Designer.cs @@ -0,0 +1,119 @@ +namespace ConstructionCompanyView +{ + partial class FormPosition + { + /// + /// 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.buttonCancel = new System.Windows.Forms.Button(); + this.buttonCreate = new System.Windows.Forms.Button(); + this.textBoxSalary = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.textBoxName = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // buttonCancel + // + this.buttonCancel.Location = new System.Drawing.Point(307, 117); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(94, 29); + this.buttonCancel.TabIndex = 11; + this.buttonCancel.Text = "Отмена"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // buttonCreate + // + this.buttonCreate.Location = new System.Drawing.Point(202, 117); + this.buttonCreate.Name = "buttonCreate"; + this.buttonCreate.Size = new System.Drawing.Size(94, 29); + this.buttonCreate.TabIndex = 10; + this.buttonCreate.Text = "Создать"; + this.buttonCreate.UseVisualStyleBackColor = true; + this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click); + // + // textBoxSalary + // + this.textBoxSalary.Location = new System.Drawing.Point(108, 56); + this.textBoxSalary.Name = "textBoxSalary"; + this.textBoxSalary.Size = new System.Drawing.Size(113, 27); + this.textBoxSalary.TabIndex = 9; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 59); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(73, 20); + this.label2.TabIndex = 8; + this.label2.Text = "Зарплата"; + // + // textBoxName + // + this.textBoxName.Location = new System.Drawing.Point(108, 6); + this.textBoxName.Name = "textBoxName"; + this.textBoxName.Size = new System.Drawing.Size(276, 27); + this.textBoxName.TabIndex = 7; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(77, 20); + this.label1.TabIndex = 6; + this.label1.Text = "Название"; + // + // FormPosition + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(422, 165); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonCreate); + this.Controls.Add(this.textBoxSalary); + this.Controls.Add(this.label2); + this.Controls.Add(this.textBoxName); + this.Controls.Add(this.label1); + this.Name = "FormPosition"; + this.Text = "Должность"; + this.Load += new System.EventHandler(this.FormPosition_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Button buttonCancel; + private Button buttonCreate; + private TextBox textBoxSalary; + private Label label2; + private TextBox textBoxName; + private Label label1; + } +} \ No newline at end of file diff --git a/ConstructionCompany/ConstructionCompanyView/FormPosition.cs b/ConstructionCompany/ConstructionCompanyView/FormPosition.cs new file mode 100644 index 0000000..4893f1d --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormPosition.cs @@ -0,0 +1,95 @@ +using ConstructionCompanyContracts.BindingModels; +using ConstructionCompanyContracts.BusinessLogicContracts; +using ConstructionCompanyContracts.SearchModels; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ConstructionCompanyView +{ + public partial class FormPosition : Form + { + private readonly ILogger _logger; + private readonly IPositionLogic _logic; + private int? _id; + public int Id { set { _id = value; } } + public FormPosition(ILogger logger, IPositionLogic logic) + { + InitializeComponent(); + _logic = logic; + _logger = logger; + } + + private void buttonCreate_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(textBoxName.Text)) + { + MessageBox.Show("Заполните название", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + if (string.IsNullOrEmpty(textBoxSalary.Text)) + { + MessageBox.Show("Заполните зарплату", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + _logger.LogInformation("Сохранение материала"); + try + { + var model = new PositionBindingModel + { + Id = _id ?? 0, + PositionName = textBoxName.Text, + Salary = Convert.ToInt32(textBoxSalary.Text) + }; + var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model); + if (!operationResult) + { + throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); + } + MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); + DialogResult = DialogResult.OK; + Close(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка сохранения компонента"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + Close(); + } + + private void FormPosition_Load(object sender, EventArgs e) + { + if (_id.HasValue) + { + try + { + _logger.LogInformation("Получение материала"); + var view = _logic.ReadElement(new PositionSearchModel { Id = _id.Value }); + if (view != null) + { + textBoxName.Text = view.PositionName; + textBoxSalary.Text = view.Salary.ToString(); + } + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка получения материала"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + } +} diff --git a/ConstructionCompany/ConstructionCompanyView/FormPosition.resx b/ConstructionCompany/ConstructionCompanyView/FormPosition.resx new file mode 100644 index 0000000..f298a7b --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormPosition.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/ConstructionCompany/ConstructionCompanyView/FormPositions.Designer.cs b/ConstructionCompany/ConstructionCompanyView/FormPositions.Designer.cs new file mode 100644 index 0000000..d6a9cdb --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormPositions.Designer.cs @@ -0,0 +1,120 @@ +namespace ConstructionCompanyView +{ + partial class FormPositions + { + /// + /// 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.dataGridView = new System.Windows.Forms.DataGridView(); + this.buttonRef = new System.Windows.Forms.Button(); + this.buttonDel = new System.Windows.Forms.Button(); + this.buttonUpd = new System.Windows.Forms.Button(); + this.buttonAdd = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit(); + this.SuspendLayout(); + // + // dataGridView + // + this.dataGridView.BackgroundColor = System.Drawing.Color.White; + this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView.Dock = System.Windows.Forms.DockStyle.Left; + this.dataGridView.Location = new System.Drawing.Point(0, 0); + this.dataGridView.MultiSelect = false; + this.dataGridView.Name = "dataGridView"; + this.dataGridView.RowHeadersVisible = false; + this.dataGridView.RowHeadersWidth = 51; + this.dataGridView.RowTemplate.Height = 29; + this.dataGridView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dataGridView.Size = new System.Drawing.Size(415, 450); + this.dataGridView.TabIndex = 11; + // + // buttonRef + // + this.buttonRef.Location = new System.Drawing.Point(448, 184); + this.buttonRef.Name = "buttonRef"; + this.buttonRef.Size = new System.Drawing.Size(134, 29); + this.buttonRef.TabIndex = 15; + this.buttonRef.Text = "Обновить"; + this.buttonRef.UseVisualStyleBackColor = true; + this.buttonRef.Click += new System.EventHandler(this.buttonRef_Click); + // + // buttonDel + // + this.buttonDel.Location = new System.Drawing.Point(448, 126); + this.buttonDel.Name = "buttonDel"; + this.buttonDel.Size = new System.Drawing.Size(134, 29); + this.buttonDel.TabIndex = 14; + this.buttonDel.Text = "Упразднить"; + this.buttonDel.UseVisualStyleBackColor = true; + this.buttonDel.Click += new System.EventHandler(this.buttonDel_Click); + // + // buttonUpd + // + this.buttonUpd.Location = new System.Drawing.Point(448, 69); + this.buttonUpd.Name = "buttonUpd"; + this.buttonUpd.Size = new System.Drawing.Size(134, 29); + this.buttonUpd.TabIndex = 13; + this.buttonUpd.Text = "Изменить"; + this.buttonUpd.UseVisualStyleBackColor = true; + this.buttonUpd.Click += new System.EventHandler(this.buttonUpd_Click); + // + // buttonAdd + // + this.buttonAdd.Location = new System.Drawing.Point(448, 12); + this.buttonAdd.Name = "buttonAdd"; + this.buttonAdd.Size = new System.Drawing.Size(134, 29); + this.buttonAdd.TabIndex = 12; + this.buttonAdd.Text = "Добавить"; + this.buttonAdd.UseVisualStyleBackColor = true; + this.buttonAdd.Click += new System.EventHandler(this.buttonAdd_Click); + // + // FormPositions + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(611, 450); + this.Controls.Add(this.buttonRef); + this.Controls.Add(this.buttonDel); + this.Controls.Add(this.buttonUpd); + this.Controls.Add(this.buttonAdd); + this.Controls.Add(this.dataGridView); + this.Name = "FormPositions"; + this.Text = "Должности"; + this.Load += new System.EventHandler(this.FormPositions_Load); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private DataGridView dataGridView; + private Button buttonRef; + private Button buttonDel; + private Button buttonUpd; + private Button buttonAdd; + } +} \ No newline at end of file diff --git a/ConstructionCompany/ConstructionCompanyView/FormPositions.cs b/ConstructionCompany/ConstructionCompanyView/FormPositions.cs new file mode 100644 index 0000000..f95697a --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormPositions.cs @@ -0,0 +1,110 @@ +using ConstructionCompanyContracts.BindingModels; +using ConstructionCompanyContracts.BusinessLogicContracts; +using ConstructionCompanyContracts.StorageContracts; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ConstructionCompanyView +{ + public partial class FormPositions : Form + { + private readonly ILogger _logger; + private readonly IPositionLogic _logic; + public FormPositions(ILogger logger, IPositionLogic logic) + { + InitializeComponent(); + _logger = logger; + _logic = logic; + } + + private void FormPositions_Load(object sender, EventArgs e) + { + LoadData(); + } + private void LoadData() + { + try + { + var list = _logic.ReadList(null); + if (list != null) + { + dataGridView.DataSource = list; + dataGridView.Columns["Id"].Visible = false; + dataGridView.Columns["PositionName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + } + _logger.LogInformation("Загрузка материалов"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки материалов"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonAdd_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormPosition)); + if (service is FormPosition form) + { + if (form.ShowDialog() == DialogResult.OK) + { + LoadData(); + } + } + } + + private void buttonUpd_Click(object sender, EventArgs e) + { + if (dataGridView.SelectedRows.Count == 1) + { + var service = Program.ServiceProvider?.GetService(typeof(FormPosition)); + if (service is FormPosition form) + { + form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + if (form.ShowDialog() == DialogResult.OK) + { + LoadData(); + } + } + } + } + + private void buttonDel_Click(object sender, EventArgs e) + { + if (dataGridView.SelectedRows.Count == 1) + { + if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + { + int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + _logger.LogInformation("Удаление изделия"); + try + { + if (!_logic.Delete(new PositionBindingModel { Id = id })) + { + throw new Exception("Ошибка при удалении. Дополнительная информация в логах."); + } + LoadData(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка удаления изделия"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + } + + private void buttonRef_Click(object sender, EventArgs e) + { + LoadData(); + } + } +} diff --git a/ConstructionCompany/ConstructionCompanyView/FormPositions.resx b/ConstructionCompany/ConstructionCompanyView/FormPositions.resx new file mode 100644 index 0000000..f298a7b --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormPositions.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/ConstructionCompany/ConstructionCompanyView/FormWarehouseMenu.Designer.cs b/ConstructionCompany/ConstructionCompanyView/FormWarehouseMenu.Designer.cs new file mode 100644 index 0000000..34530d1 --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormWarehouseMenu.Designer.cs @@ -0,0 +1,100 @@ +namespace ConstructionCompanyView +{ + partial class FormWarehouseMenu + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormWarehouseMenu)); + this.panel1 = new System.Windows.Forms.Panel(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.материалыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.поставкиToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.panel1.SuspendLayout(); + this.menuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("panel1.BackgroundImage"))); + this.panel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.panel1.Controls.Add(this.menuStrip1); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(542, 327); + this.panel1.TabIndex = 1; + // + // menuStrip1 + // + this.menuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.материалыToolStripMenuItem, + this.поставкиToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(542, 28); + this.menuStrip1.TabIndex = 0; + this.menuStrip1.Text = "menuStrip1"; + // + // материалыToolStripMenuItem + // + this.материалыToolStripMenuItem.Name = "материалыToolStripMenuItem"; + this.материалыToolStripMenuItem.Size = new System.Drawing.Size(103, 24); + this.материалыToolStripMenuItem.Text = "Материалы"; + this.материалыToolStripMenuItem.Click += new System.EventHandler(this.материалыToolStripMenuItem_Click); + // + // поставкиToolStripMenuItem + // + this.поставкиToolStripMenuItem.Name = "поставкиToolStripMenuItem"; + this.поставкиToolStripMenuItem.Size = new System.Drawing.Size(88, 24); + this.поставкиToolStripMenuItem.Text = "Поставки"; + this.поставкиToolStripMenuItem.Click += new System.EventHandler(this.поставкиToolStripMenuItem_Click); + // + // FormWarehouseMenu + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(542, 327); + this.Controls.Add(this.panel1); + this.MainMenuStrip = this.menuStrip1; + this.Name = "FormWarehouseMenu"; + this.Text = "Склад"; + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + private Panel panel1; + private MenuStrip menuStrip1; + private ToolStripMenuItem материалыToolStripMenuItem; + private ToolStripMenuItem поставкиToolStripMenuItem; + } +} \ No newline at end of file diff --git a/ConstructionCompany/ConstructionCompanyView/FormWarehouseMenu.cs b/ConstructionCompany/ConstructionCompanyView/FormWarehouseMenu.cs new file mode 100644 index 0000000..ea446cc --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormWarehouseMenu.cs @@ -0,0 +1,39 @@ +using Microsoft.EntityFrameworkCore.Metadata.Conventions; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ConstructionCompanyView +{ + public partial class FormWarehouseMenu : Form + { + public FormWarehouseMenu() + { + InitializeComponent(); + } + + private void материалыToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormMaterials)); + if (service is FormMaterials form) + { + form.ShowDialog(); + } + } + + private void поставкиToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormMaterialOrders)); + if (service is FormMaterialOrders form) + { + form.ShowDialog(); + } + } + } +} diff --git a/ConstructionCompany/ConstructionCompanyView/FormWarehouseMenu.resx b/ConstructionCompany/ConstructionCompanyView/FormWarehouseMenu.resx new file mode 100644 index 0000000..82559ec --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/FormWarehouseMenu.resx @@ -0,0 +1,283 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + + + + 17, 17 + + + 78 + + \ No newline at end of file diff --git a/ConstructionCompany/ConstructionCompanyView/Logos/warehouseLogo.png b/ConstructionCompany/ConstructionCompanyView/Logos/warehouseLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..447c0f9e86d428b97b8cfbe7e1be05fde143b824 GIT binary patch literal 7635 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 literal 0 HcmV?d00001 diff --git a/ConstructionCompany/ConstructionCompanyView/Program.cs b/ConstructionCompany/ConstructionCompanyView/Program.cs index dff3b87..4d9c702 100644 --- a/ConstructionCompany/ConstructionCompanyView/Program.cs +++ b/ConstructionCompany/ConstructionCompanyView/Program.cs @@ -24,7 +24,7 @@ namespace ConstructionCompanyView var services = new ServiceCollection(); ConfigureServices(services); _serviceProvider = services.BuildServiceProvider(); - Application.Run(_serviceProvider.GetRequiredService()); + Application.Run(_serviceProvider.GetRequiredService()); } private static void ConfigureServices(ServiceCollection services) @@ -50,6 +50,20 @@ namespace ConstructionCompanyView services.AddTransient(); services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); } } } \ No newline at end of file diff --git a/ConstructionCompany/ConstructionCompanyView/Properties/Resources.Designer.cs b/ConstructionCompany/ConstructionCompanyView/Properties/Resources.Designer.cs new file mode 100644 index 0000000..c66a748 --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/Properties/Resources.Designer.cs @@ -0,0 +1,83 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace ConstructionCompanyView.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("ConstructionCompanyView.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 cash_register_solid { + get { + object obj = ResourceManager.GetObject("cash-register-solid", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap users_viewfinder_solid { + get { + object obj = ResourceManager.GetObject("users-viewfinder-solid", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/ConstructionCompany/ConstructionCompanyView/Properties/Resources.resx b/ConstructionCompany/ConstructionCompanyView/Properties/Resources.resx new file mode 100644 index 0000000..492ff35 --- /dev/null +++ b/ConstructionCompany/ConstructionCompanyView/Properties/Resources.resx @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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\cash-register-solid.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\users-viewfinder-solid.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/ConstructionCompany/ConstructionCompanyView/Resources/cash-register-solid.png b/ConstructionCompany/ConstructionCompanyView/Resources/cash-register-solid.png new file mode 100644 index 0000000000000000000000000000000000000000..756449ac16845d2af2396d7ca536f009fd5864ef GIT binary patch literal 6010 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 literal 0 HcmV?d00001 diff --git a/ConstructionCompany/ConstructionCompanyView/Resources/users-viewfinder-solid.png b/ConstructionCompany/ConstructionCompanyView/Resources/users-viewfinder-solid.png new file mode 100644 index 0000000000000000000000000000000000000000..48ebae5a1c3aa471785f66fd288e6855d6bcea64 GIT binary patch literal 9320 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 z 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