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 + + + + + iVBORw0KGgoAAAANSUhEUgAAAkAAAAIACAYAAABqwtNaAAAABGdBTUEAALGPC/xhBQAAMUlJREFUeF7t + 3Qu0bVdd3/Ebkpv3k4S8IA/y4hEIIRFBiMOqKVI1tlYZtVVSh6201A5DxRKrFqNWSVsUYqlVh0NKUIYN + QtVUtEZrqwGLBgKEkARCEhKSEPJOyDux/f2SrNxz7/3de85ee+6955zr+x3jMwZjkdx7zjz7/rPu3mut + uYmIaAEdKKfJd8u58qvye3KJ/LVcIV+Q6+VquUz+TD4sF8p5cracIUcKERERUVXtKieLT1h8onOl/L/C + 7hOfPPnE6CzxCRYRERHRUttPvkc+ID45SScti/SY/IW8WY4WIiIiooW0r7xBflceknRisgp/Ix+Ttwon + Q0RERFSk08Ufba3inZ5ZPSGXyhtlHyEiIiLacL7w2Bcvf07SiUYL7hFfUH2m7CJERERE27WH+ALji8TX + 2KSTilZdJb6Amo/IiIiI6Ml8B9f5crukk4eePC6+m+z1srsQERHRhDpIfJ3MJySdKEzBXeJrm/y8IiIi + Iuo0P6/H18P4I65HJZ0UTJWfXeRrnp4jRERE1EEvEn/E9WVJ//HHFg/LxeKPyHYTIiIiaqgDxB9x+Zbw + 9B96rO8WuUBeKkRERFRpzxLvneXrWh6Q9B91jOO9ys6RZwsRERFV0FHi61euk/Qfb5TjJ2D7GiqeLURE + RLSC9hJfp+Jbur0VRPqPNRbrJvG1VccJERERLbCWtqWYCrbfICIiWkDPFX/E9XlJ/wFGPe4Vtt8gIiIa + mbel8EdcviW7t20ppuJqYfsNIiKiDTSlbSmmwh+R+Vqts8XXbhEREZHyrdW+fuRySf8BRT/YfoOIiCYd + 21KA7TeIiGgysS0FtvWIsP0GERF1F9tSYKOG7TdOESIioubythT+iMu3RLMtBcZg+w0iImom3/Ls6zqu + l/QfNWBWw/YbZ4mvHSMiIqoitqXAsgzbbxwvREREK2nYluJ+Sf+xAhaF7TeIiGipsS0FasP2G0REtJDY + lgKtGLbfOEaIiIhG5Y+4fEsy21KgNWy/QUREM8W2FOjN3eJr1XxCT0RE9ExsS4GpGLbfOFSIiGiivVjY + lgJTtHb7jc1CRESdd6CwLQWwBdtvEBF1GttSABszbL9xsBARUaOdJL4lmG0pgNmw/QYRUWOxLQVQFttv + EBFVHNtSAIu1dvuNfYWIiFYU21IAq8H2G0RES27tthSPSxrOAJaH7TeIiBbYifJO8VNt0xAGsFr+C8mH + 5JuEiIjmyG+tf6v8ofj6gzR0AdTnM/LPhX3IiIhmzNcW/JWk4QqgDbeJr9PzR9dERLSTzpC/kDRMAbTp + OvHO9H4oKRERrcm7sPs2dp7dA/TLT5pmV3oiIuXrfPw3w9slDUwAfXlMvPcYzxIiosl2mPyRpCEJoG/e + ouZVQkQ0qf623CppMAKYhkfFzxDi2iAi6j5vrPgLwrU+03St/Dv5BjnqaV8vPyX+/9K/g/79nuwvRERd + 5s/8f1/SAES/hp3FN7JtwrCn232Sfi306wo5VoiIusr7dn1C0uBDn3zHjzfO3E9mjV39p8k3Q/hRGERE + XfQS4XqfabhR/BHXCVIq/1r+Nf1rp98TfXlQXidERE33IuHkp28Piz/iOkt2k0XlC2X97oA/IntA0teC + Pjwi3yFERE32MuH5Pv26UrzNwSGy7A4Qf7x2qaSvDe3zSdDfFSKipnqB3CFpsKFdX5Z3yMlSS/5a/DX5 + a0tfM9rldxe/UYiImsjvCHxO0kBDex4XX4zsi5I3S635EQu+08wfx/ndg/S9oD33ykuFiKjqfPfORyUN + MrTls+KPuPzE7tY6SPwRGXce9sFPjT5ciIiqzX/7TgMMbbhT3i09bVjp78Xfk7+39D2jDR+T3YWIqLr+ + paTBhbo9If6Iy5vS7i29tof4TjWfpHtDzrQWqNs7hYioqk4RP78jDS3U6RrxPkxTfPrukXKOfFrS2qBO + fijmdwoRURX5Sb+flzSwUBdfUPrr8hqhp/JaeE28NmnNUJe75GghIlp5vyRpUKEew7YU3o+NcnsK22+0 + 4cNCRLTSXim+TToNKazWTXK+HC80W88T3wH3BUlri9X7HiEiWkm+I+MzkoYTVmPYed0X+/q5ODRfa7ff + +KqkNcdq+Cnzq3gKORHRprdKGkxYPj976QfFW0TQYvLaeo15zlU9flmIiJaaHzTHc1VW6xa5QHwHHi03 + b/XiO+hukPSzwXL4cQYvFCKipfUfJQ0kLJa3eLhYat+WYir5IzJvv3Gh8BiI1fhvQkS0lHyBKMN+ubyl + ww/LwUJ15p+Nf0Zsv7FcvmPva4SIaOG9S9IgQll+3okvvj1NqK1eLL4D7zZJP1uU9UEhIlpo+wsPjFuc + YVsKf8TFvkftt3aH+kcl/cwxP/+54XEPRLTQ/rWkAYT5XCW+qJYn3PabdzP39huflPQawHz8zjQR0ULy + 32a/KGn4YHb3yK/Iq4SmlX/m/tn7NZBeG5jdfcJjIIhoIb1W0uDBxvmt+kvF21LsIzTtvEO9P+70nX3s + UD+/HxAiouK9V9LQwfpuFF8Ue5wQpZ4r3n6DjYXH+1MhIiraXsLFz7MZtqXwRbC7CNFGO118B+D9kl5b + yPwOqx/TQURUrH8gaeBga34myV+I34rfT4jmya8hv5b8mmKH+o15ixARFet9koYNnnKz+COuE4VoEfkO + QX9Edp2k1yCe8idCRFQkf3zjfafSsJmyh2XYlmI3IVpGa7ffeEDSa3PKvF0MNxgQUZFOlTRopsx37PyU + sDUFrSq/9vwa5O6x7X2rEBHN3VslDRk89S6QN2P8FvHfzIkWmV9jfq35NefXXnpNYtOmdwoR0dx9SNKQ + wdaG64B4JD+Vznc2cf3Pxn1EiIjm7gZJQwaZ79bhYYc0b2sfkvi4pNcaMl8b5SfXExGN7iDh9tvxvNWB + n+dyhhBtpJPF7yTeIek1hY3xjvxERKP7ZknDBbP7lHgzzEOEaG1+Tfi14ddIeu1gdt8nRESj+xeShgvG + 82263D5Pa29nf1DSawXj/bQQEY3u7ZKGC8oYLpw+QWgaHSW+oPl6Sa8JlPEeISIa3W9JGi4o7zLhwuk+ + 21P8jt8lwjV1y8EToYlorv5c0nDB4njTWX8s4o9HqO28qekFwgXNy/c5ISIa3dWShguW4wp5s3DhdDv5 + Z+WfmX926WeK5fAdmEREo7tJ0nDBcnHhdN1xQXN9vEUIEdHoeOu+Plw4XU9c0Fy3zUJENCr+Nlu34cLp + fYWWExc0t+MAISIaFQO+DcMTp18ptJi8tl5jr3X6GaA+RwgR0ajSUEHdrhJ/LHOo0Hx5Kxi/w3a5pLVG + 3Y4UIqJRpaGCNngDTX9Mw4XTszVc0HyR+OLztLZoAydARDS6NFTQnlvEF06fKJQbLmi+QdIaoj2cABHR + 6NJQQdu4cHpLXNDcN06AiGh0aaigD2ufOL2LTKnhCc13Slob9IETICIaXRoq6M9w4fRh0mvDBc2flLQG + 6A8nQEQ0ujRU0K+1F0738BA5LmieNk6AiGh0aahgGnzhtD8meqm0li/2Pk+4oHnaOAEiotGloYLpaeHC + aS5oxrY4ASKi0aWhguny1ij+OKmmC6d9QbOf0HyfpK8Z08UJEBGNLg0VwK6WVV04/WzhgmashxMgIhpd + GirAWsu6cHrtBc2PSvpagLU4ASKi0aWhAuzIrVL6wumTxBc0f1HS7wnsCCdARDS6NFSAjRgunN5PZo0L + mlECJ0BENLo0VIBZzHLhNBc0oyROgIhodGmoAGP5wml/nHW0DB0u58inJP07wFicABHR6NJQAeb1mPze + 0/y/0z8DzIsTICIaXRoqANACToCIaHRpqABACzgBIqLRpaECAC3gBIiIRpeGCgC0gBMgIhpdGioA0AJO + gIhodGmoAEALOAEiotGloQIALeAEiIhGl4YKALSAEyAiGl0aKgDQAk6AiGh0aagAQAs4ASKi0aWhAgAt + 4ASIiEaXhgqAft0t3pHfO/On/78lnAAR0ejSUAHQlyfkUnmj7C1D6Z9tCSdARDS6NFQA9OEmOV+eL6n0 + 77SEEyAiGl0aKgDa9bBcJGfJrrKz0r/fEk6AiGh0aagAaM+Vcq4cLBst/Tot4QSIiEaXhgqANgwXNL9c + xpR+zZZwAkREo0tDBUC9fEHzJXK27CXzlH79lnACRESjS0MFQH1uFF/QfKyUKv0+LeEEiIhGl4YKgDo8 + JL6g+UzZRUqXfs+WcAJERKNLQwXAal0m58izZZGl37slnAAR0ejSUAGwfHeJL2h+mSyr9HW0hBMgIhpd + GioAlmO4oPn1slmWXfqaWsIJEBGNLg0VAIt1jZwnR8sqS19bSzgBIqLRpaECoLwHZZEXNI8pfZ0t4QSI + iEaXhgqAcnxBszch3U9qK329LeEEiIhGl4YKgPncKhfIS6Xm0tfeEk6AiGh0aagAmN3jssoLmseUvo+W + cAJERKNLQwXAxl0l3oT0MGmt9P20hBMgIhpdGioAdu5euVBquqB5TOl7awknQEQ0ujRUAGTDBc37Sg+l + 77ElnAAR0ejSUAGwxc3iTUhPkN5K329LOAEiotGloQJM3SNysfiC5t2k19L33hJOgIhodGmoAFP1WfEF + zYfKFEpr0BJOgIhodGmoAFNyj3gT0jNkaqX1aAknQEQ0ujRUgN55E9JLxRc07yNTLa1NSzgBIqLRpaEC + 9OpL4guajxfKa9QSToCIaHRpqAA9eVi8CelZ0vMFzWNK69USToCIaHRpqAA9uFJ8QfMhQrm0bi3hBIiI + RpeGCtCqu8UXNJ8utH5pDVvCCRARjS4NFaAlvqDZm5CeLXsLbby0ni3hBIiIRpeGCtCCm8QXND9faFxp + XVvCCRARjS4NFaBml8s3SsubkNZSWt+WcAJERKNLQwWoma/xoTKl9W0JJ0BENLo0VICacQJUrrS+LeEE + iIhGl4YKUDNOgMqV1rclnAAR0ejSUAFqxglQudL6toQTICIaXRoqQM04ASpXWt+WcAJERKNLQwWoGSdA + 5Urr2xJOgIhodGmoADXjBKhcaX1bwgkQEY0uDRWgZpwAlSutb0s4ASKi0aWhAtSME6BypfVtCSdARDS6 + NFSAmnECVK60vi3hBIiIRpeGClAzToDKlda3JZwAEdHo0lABasYJULnS+raEEyAiGl0aKkDNOAEqV1rf + lnACRESjS0MFqBknQOVK69sSToCIaHRpqAA14wSoXGl9W8IJEBGNLg0VoGacAJUrrW9LOAEiotGloQLU + jBOgcqX1bQknQEQ0ujRUgJpxAlSutL4t4QSIiEaXhgpQM06AypXWtyWcABHR6NJQAWrGCVC50vq2hBMg + IhpdGipAzTgBKlda35ZwAkREo0tDBagZJ0DlSuvbEk6AiGh0aagANeMEqFxpfVvCCRARjS4NFaBmnACV + K61vSzgBIqLRpaEC1IwToHKl9W0JJ0BENLo0VICacQJUrrS+LeEEiIhGl4YKUDNOgMqV1rclnAAR0ejS + UAFqxglQudL6toQTICIaXRoqQM04ASpXWt+WcAJERKNLQwWoGSdA5Urr2xJOgIhodGmoADXjBKhcaX1b + wgkQEY0uDRWgZpwAlSutb0s4ASKi0aWhAtSME6BypfVtCSdARDS6NFSAmnECVK60vi3hBIiIRpeGClAz + ToDKlda3JZwAEdHo0lABasYJULnS+raEEyAiGl0aKkDNOAEqV1rflnACRESjS0MFqBknQOVK69sSToCI + aHRpqAA14wSoXGl9W8IJEBGNLg0VoGacAJUrrW9LOAEiotGloQLUjBOgcqX1bQknQEQ0ujRUgJpxAlSu + tL4t4QSIiEaXhgpQM06AypXWtyWcABHR6NJQAWrGCVC50vq2hBMgIhpdGipAzTgBKlda35ZwAkREo0tD + BagZJ0DlSuvbEk6AiGh0aagANeMEqFxpfVvCCRARjS4NFaBmnACVK61vSzgBIqLRpaEC1IwToHKl9W0J + J0BENLo0VICacQJUrrS+LeEEiIhGl4YKUDNOgMqV1rclnAAR0aiOkzRUgJpxAlSutL4t+S7ZVYiI1s0n + PefKZZIGClA7ToDKlda3NbeLXxNnCidDRLRV+8vZcon8jaQhArSCE6BypfVt2S1ygZwiRDThThf/x+J+ + ScMCaBEnQOVK69sLv8t9jjxbiGgCPU/8Ede1koYC0DpOgMqV1rc3D8lFcpbwERlRZ+0pr5eL5XFJQwDo + BSdA5Urr27Ob5Hw5Xoio4b5O/B+DeyT9YQd6xAlQmb5W0vpOwRPyp/IG2VuIqIGOEH+u/SlJf7CB3nEC + ND5fD/NGuVzS2k7RvXKh+C6yXYSIKmp38efX/hz7UUl/iIGp4ARotnzdi//jzvxY39VynhwjRLTCThZ/ + Xn2bpD+swBRxArSxXizMj3H8EZkfG+LHh+wlRLSEDhS/Rc2DCoGME6AdN8yPSyWtHWZ3t/g1d4YQUeGe + JX6L2p9DPyjpDyGAp3ACtHVr58cDktYMZVwpfszIoUJEc/QC8efNN0j6wwZge5wAPdVJwvxYjUfEjx3x + 40c2CxFtILalAOYz5RMg5kd9hu03XiZEtE1+i9qfH3twf1XSHyIAGzO1E6C184Ntbeo2bL9xsBBNumFb + ii9I+sMCYHZTOQFiW5t2sf0GTbJhWwreogYWo+cTILa16Q/bb1D3eed1fw58p6Q/BADK6PEEiPkxDf6I + zI8p2FeImo5tKYDl6+UE6Ejx/Pi0pO8T/WL7DWqytdtSPCbpxQ1gcVo+AdpDmB9Y6xph+w2qumFbiq9I + ehEDWI4WT4CYH1jP2u032KGeVt5B4s9rPy7pBQtg+Vo5ARrmxyckfR/AjrD9Bq2k4bHyfovaT/tML04A + q1PzCdDandeZHyiB7Tdo4Q3bUnxR0osQQB1qPAF6kfgjri9L+pqBefmxCP6IjO03qEg8Vh5oTy0nQAcI + O69jFW4Vtt+gmWNbCqBtqzwBYud11IbtN2jdjhK2pQDat4oToKPF8+M6SV8TsGpsv0FbxbYUQH+WdQK0 + lzA/0KIvia9JO0FoYvmx8h6S90l6cQBo16JPgIb5wc7r6AHbb0wgHisPTMMiToCeK/6I6/OSfk+gdQ+K + PyJj+41O4rHywPSUOgFi53VM1bD9xrFCjcVj5YHpmvcEaNh5/Q5Jvz4wFWy/0UhsSwHAxpwAHSH+iPyT + kn5NYOrYfqOyeKw8gG1t9ARodxk+In9U0q8FYHtsv7HCXij+iMtPu0w/HADTtd4J0PAR+W2S/n0AG8P2 + G0vKj5VnWwoA60knQAeKPyL3Lb/p3wEwnzvFf/ZOFSoQ21IAmNVwArR2Wwrf4pv+WQDlsf3GHB0vPyPs + vA5gVn8g/0FuWXMMwPL5Lx6/Jf6LiP9CQjvIFyT+Q/nfwkdcAAD0w29o/KRw4fSaDhdfTX6jpEUDAAB9 + 8B3bvvPyNTLZvPv6rwm3nwIAMD2+qemVMpkOEd+C6q3504IAAIDp8InQy6XbdpO3CDsoAwCAtbztxn8S + P/Kmq7y3zl9L+qYBAADMDzj2M/+az7spe1NBn9mlbxQAAGBbvyvNPkfoBXK5pG8MAABgZ74sr5Wm+n7h + yc3T5RPffy8/9LSfFz4CBbARaX58THg+3DR5v7GfkuofpLiLnCfpm0Df/LmtP+58mewob2Lr1wdP+Aaw + 1kbmx/PEz4z7gqRfA337oOwtVbaP+DO79IWjT2N3Ah72aPLDsPxQrPRrA+jbPPODPSKnye8O+kS4qvxo + 609I+oLRn0+KN7rzM53mzb+Gfy3/mun3AtCXkvPDt0x7l/+PSvq90B9/guBrjKvIJz9XSPpC0Y+7xX/j + 8t+8FtXJ4odkfkXS1wCgTcuYH/6Poj9iv0HS14B++OJo//dipXHy0zc/vsBvUfuZDHvJsvLGuGeJPyJj + qxSgTauaH8NH7BeKdyNPXxvad5u8RFaS78//rKQvDG27Snyx4ZGy6vw1+Gvx15S+VgB1qWl++L9TPyw8 + kqVPfifoBFlq/hv6/5L0BaFN94r/xuS/OfluvhrzE8V9p8idkr4HAKvRwvx4sfgjdr9zkL4HtOlaeY4s + Jb+43yfpC0Fb/Bb1peKLCPeVVvITxn3nyMXiO0nS9wZgsVqdH3zE3h8/J2opt8j/nKQvAO24TvxgqWOl + 9fw9+Hvx95S+VwBl9TQ/jpC3CpdztO/9stD+jvA0zjY9JP4bT81vUc+bPyLznSb3S1oDAONMZX74I/Y7 + JK0B6vcmWUh++NDtkn5T1Osy8TM3ni1TaX/xnSe+A4UTdmC8Kc6PPYSP2Nv0sJwmRdtN/lzSb4j63Cxv + l2oeFrXCvAZeC69JWisAW2N+bOkYeZuw/UY7Pif7SbH8GWn6jVAPn/n6byz+m4tPWGnr1j4b5AFJawhM + FfNj/fiIvR3vliL5Qjf2W6nXleJnbiztNsAOOlB854rvYElrCkwF82P2/FBHnyjyEXu9fIfia2Tu/ljS + b4DVuUv8N5Hin3VOMJ4NgqlhfpTraPEJ5PWS1hqr4wdy+nqu0X2vpF8Yy/eY/L58p/g5FlQ2r6nX1mvs + tU4/A6BVzI/Ftqu8Tn5bfMdc+hlg+f6NjMp/SLjwa/WGx8ofLrScfMeLPyLj8floHfNj+Q071PMR++rd + J96zdOZ+RNIviMW7R4bHytNqG54NwiMg0ArmRz29SPwRu/esSj8rLN4vykz5FjKuiViutY+V30eortY+ + G4SPyFAb5kfd+SMyn5Cy/cbyPSLHyYb7cUm/EMr7vPykHCXURv5Z+Wfmn136mQLLwvxoL38k409YrpD0 + M0V5/0U21Ga5SdIvgjKm8Fj5qTQ8G8SfNaefNVAa86OfThZ/RMZH7IvlZ78dIuv2jyX9ApifHyvvt6iL + PqWSqohng2DRmB/95o/Yhx3q+Yh9MX5C1o07X8q6UX5WThCaRv5Z+2fun316TQAbxfyYXt5305eheEuH + 9JrAON7iZaePgHiFpH8Rs/Fj5X0m7zN6His/3bz9xhnij8h4mjo2ivlBQ3zEXtbfkx32Lkn/EjZm2Dl5 + Q5810qTys0GGHerTawdgftCO2lP4iH1+H5CYb9O7VdK/hB27U3yGfqoQbaQXii985M8bmB80a77jzw+3 + 5EHFs/MNBN4LcrteK+lfwPb8HIf/Lt8hvEVNY/Nrx68hv5Z4Nsh0MD+oRP6I3XcC/pY8KOm1hu39gGzX + f5b0D2OLYefkw4SoZAeJ7/D5uKTXHtrH/KBFtb8MH7HzEdnOfUi261pJ//DU3S1+i9oXsxIto+HZIF+R + 9JpEO5gftOxeIOfJFyW9JqfuXvHzDp/Jj4lO/+CU+VkMPyZzbadPNEd+7fk1yHNB2sP8oFXnj1f/mbA7 + /fa2+gvJmyT9Q1PntxL/TN4gewvRMvJrza85v/Z4O7tdzA9aRX7WzXfJH8jjkl6bU/fT8ky/KekfwhZ+ + 22zYYZnHz9MiGnaev0PSaxDtYn7Qoht2nmcj8/X5Wqln+qykfwjZVcLFjFSi4eJnnsA+HcwPKpWfL+b5 + camk1xqyu+TJv4j4rVneJhvH6+YzST+gaquLqoh20nD7qp/2+4ik1xb6x/ygMfGE+TKOlU2vXnMA4/mh + dv744hQhSp0k3J2BhPlB6+U9wngAYjl/X558KFD6PzGe3470urJrM/k14NcCb1Fjo5gfNLSXfK/8iTwh + 6fWCcZ7cHd5XQ6f/E/Pz7Yf+mIMLH6cXmxhiXsyP6TY8C4wbIhbH83nTe9YcwOJcI/744xihPjtCvJnl + pyW9BoCxmB/9N9wQ8QlJrwGU9WF58q219H9iMfw25nDho5/XQG3nTYSHC5rZzwuLxvzoK26IWJ3PyJP7 + 06T/E4vnrQ5+UV4i1Fb+mflnx3YVWBXmR7v5hoi3y82SfrZYvDuFO1IqcZn445ODheps7YaD6WcIrArz + o/58QbPfufP84Anvq/ew8DfYyjwo75NvEi58XH3+Gfhn4Z+JfzbpZwbUgvlRX35mz2/I/ZJ+ZlgdHqRU + sZvEdwI8X2i5PVf8zI1rJf1sgNoxP1YXN0S0gWcLNMA/o/8p3yN7Ci0mr63X2GvNnwv0gvmxnHxRuh+u + d7Gwu0Ib4kHU6x7x8wu22s6f5mp45sbtktYc6AXzo3xsQtqueBBt8B18/pjmOUKzdaD4mRu+eDStLdA7 + 5sf42IS0D/Eg2uKr2f22q+8w2E0oNzxz40J5QNJaAlPD/NhYbELan3gQ7fJzJfx27AlCT3WU+G+610la + MwBPYX5sHzdE9CseRB/88Y7fpt1HppYv9uSZG8B4U54fe4jnBxc09y0eRF/uFX/sM4VNFb0J6QXCJoJA + GVOaH9wQMS3xIPp1lfjt3MOkl4ZNBC+X9D0DKKPH+THcEMEmpNMTD6J/flt32FRxs7QWmwgCq9PL/PA7 + WzzhfbriQUzLreKPjU6R2vMmgucJe9gBdWhpfhwtfgfreknfC6YlHsR0DRc+7ie1xCaCQBtqnB/cEIEd + iQeBh8QfL63ywkdf0Oxnbtwn6WsEUCfmB1oQDwJrXSP+2OkYWXRsIgj0ZZnz43Dx/PiUpK8FWCseBBJv + qjhc+OiN/0q1qwwXND8q6fcG0DbmB2oTDwLruUv89vKpMjY2EQSmqcT8eKF4fnxZ0u8BrCceBGbhCx/9 + tvPBsl77y9nivwmmXwvAtDA/sCrxIDCGN1X029Bnid+WHvJFkGwiCGBndjQ/3HBBM/MDJcWDwLy88ejb + nsYmpABmwfzAMsSDAAAAPYsHAQAAehYPAgAA9CweBAAA6Fk8CAAA0LN4EAAAoGfxIAAAQM/iQQAAgJ7F + gwAAAD2LBwEAAHoWDwIAAPQsHgTQt4/IP93mGABsRC/zIx4E0J9b5QI5RYbSPwcA2+pxfsSDAPrwuFwi + r5fNsm3p3wEA631+xIMA2na1nCdHy85K/y6AaZvK/IgHAbTnQblIzpRdZCOlXwfA9ExxfsSDANpxmbxR + 9pVZS78egOmY8vyIBwHU7RbxBYkvkXlKvzaAvjE/nhIPAqjPehckjin9PgD6w/zYXjwIoB5XyblyqJQu + /X4A+sH82LF4EMBq3SsXii9IXGTp9wbQNubHxsSDAFZjuCBxH1lG6WsA0Cbmx2ziQQDLc7OcLyfIsktf + D4B2MD/GiwcBLNYjcrH4gsTdZFWlrw1A3ZgfZcSDABbjSvEFic+RGkpfI4A6MT/KigcBlHOP/KqcIbWV + vl4A9WB+LE48CGA+T8il4gsS95ZaS187gNVifixHPAhgnC+JL0g8TloofQ8AVoP5sVzxIICNe1i8ieBZ + squ0VPp+ACwP82N14kEA6xsuSDxEWi19XwAWj/mxevEggOxu8QWJp0kPpe8RwGIwP+oSDwLYwhckehPB + s2Uv6an0/QIoh/lRr3gQwKZNN4ovSDxWei193wDmx/yoXzwITNVD4gsSvYngLtJ7aQ0AjMP8aEs8CEyN + NxE8Rw6WKZXWAsBsmB9tigeBKbhLfEHiqTLV0roAWB/zI69LS+JBoFfDBYneRHB3mXppjQBkzI+tS2vU + kngQ6M01cp4cI7SltFYAtsb8yKW1akk8CPRgahckjimtGwDmx0ZK69aSeBBomS9I9CaC+wntvLR+wJQx + PzZeWr+WxINAa26VC+QUoY2X1hKYGubHuNJatiQeBFrwuAwXJG4Wmr20rsAUMD/mL61rS+JBoGY3yY/K + YULzldYX6Bnzo1xpfVsSDwI187M3qExpfYGeMT/Klda3JfEgUDMGWLnS+gI9Y36UK61vS+JBoGYMsHKl + 9QV6xvwoV1rflsSDQM0YYOVK6wv0jPlRrrS+LYkHgZoxwMqV1hfoGfOjXGl9WxIPAjVjgJUrrS/QM+ZH + udL6tiQeBGrGACtXWl+gZ8yPcqX1bUk8CNSMAVautL5Az5gf5Urr25J4EKgZA6xcaX2BnjE/ypXWtyXx + IFAzBli50voCPWN+lCutb0viQaBmDLBypfUFesb8KFda35bEg0DNGGDlSusL9Iz5Ua60vi2JB4GaMcDK + ldYX6Bnzo1xpfVsSDwI1Y4CVK60v0DPmR7nS+rYkHgRqxgArV1pfoGfMj3Kl9W1JPAjUjAFWrrS+QM+Y + H+VK69uSeBCoGQOsXGl9gZ4xP8qV1rcl8SBQMwZYudL6Aj1jfpQrrW9L4kGgZgywcqX1BXrG/ChXWt+W + xINAzRhg5UrrC/SM+VGutL4tiQeBmjHAypXWF+gZ86NcaX1bEg8CNWOAlSutL9Az5ke50vq2JB4EasYA + K1daX6BnzI9ypfVtSTwI1IwBVq60vkDPmB/lSuvbkngQqBkDrFxpfYGeMT/Klda3JfEgUDMGWLnS+gI9 + Y36UK61vS+JBoGYMsHKl9QV6xvwoV1rflsSDQM0YYOVK6wv0jPlRrrS+LYkHgZoxwMqV1hfoGfOjXGl9 + WxIPAjVjgJUrrS/QM+ZHudL6tiQeBGrGACtXWl+gZ8yPcqX1bUk8CNSMAVautL5Az5gf5Urr25J4EKgZ + A6xcaX2BnjE/ypXWtyXxIFAzBli50voCPWN+lCutb0viQaBmDLBypfUFesb8KFda35bEg0DNGGDlSusL + 9Iz5Ua60vi2JB4GaMcDKldYX6Bnzo1xpfVsSDwI1Y4CVK60v0DPmR7nS+rYkHgRqxgArV1pfoGfMj3Kl + 9W1JPAjUjAFWrrS+QM+YH+VK69uSeBCoGQOsXGl9gZ4xP8qV1rcl8SBQMwZYudL6Aj1jfpQrrW9L4kGg + ZgywcqX1BXrG/ChXWt+WxINAzRhg5UrrC/SM+VGutL4tiQeBmjHAypXWF+gZ86NcaX1bEg8CNWOAlSut + L9Az5ke50vq2JB4EasYAK1daX6BnzI9ypfVtSTwI1IwBVq60vkDPmB/lSuvbkngQqBkDrFxpfYGeMT/K + lda3JfEgUDMGWLnS+gI9Y36UK61vS+JBoGYMsHKl9QV6xvwoV1rflsSDQM0YYOVK6wv0jPlRrrS+LYkH + gZoxwMqV1hfoGfOjXGl9WxIPAjVjgJUrrS/QM+ZHudL6tiQeBGrGACtXWl+gZ8yPcqX1bUk8CNSMAVau + tL5Az5gf5Urr25J4EKgZA6xcaX2BnjE/ypXWtyXxIFAzBli50voCPWN+lCutb0viQaBmDLBypfUFesb8 + KFda35ZsenSbA0DtGGDlSusL9Iz5Uab9JK1vSzbds80BoHYMsHKl9QV6xvwo06mS1rclm27d5gBQOwZY + udL6Aj1jfpTpXEnr24q/kU3XrTkAtIABVq60vkDPmB/zt4e0fu7woGy6bM0BoAUMsHKl9QV6xvyYv5+R + tLYt+ZJs+t01B4AWMMDm7+vlg5LWF+gZ82O+vl+ekLS2LflL2fTuNQeAFjDAxrW7fJ/wri+mjPkxLt/1 + 9S7xtTNpXVvzAdn0Y2sOAC1ggM3WIfITcouk9QSmhPkxW4fK2+Q2SevZqnfKpu9ecwBoAQNsY50svya+ + 2C+tIzBFzI+N9VL5dXlI0jq27odk04lrDgAtYIDtvDPkYunlrWqgJObHjttFzpQpzI9Xy6Znyf1PHwBa + wADbPt+WerZ8RtKaAXgK82P79hTPjyslrVlvfBH3vvJkH5X0DwE1YoBt6XA5T+6QtFYAtsb82NIRMsX5 + cY080y9K+oeAGjHANm16hbxf2MsPmA3zY9OmV8lvy2OS1qh375Nn+nZJ/xBQo6kOMH9cfZZcImldAKxv + 6vPjUknrMiV+ltEz+f5+/iaJVkxtgO0v58j1ktYDwMZNdX7cIGk9pugY2aqPSPoHgdpMZYAdJ+fL3ZLW + AcDspjI/jpcL5KuS1mGqPifbxQMR0YreB5hvY79IHpf0/QMYj/kxbe+Q7Xq+8NwQtKDHAeZtKl4vH5P0 + PQMoo9f54dvYPyXpe8YWvoEk9leS/gWgJj0NMD9m/lzxzsTpewVQVo/z42ZJ3yu29gXxwx5jb5H0LwE1 + 6WGAvUx+Qx6W9D0CWIwe5sep8l+F+TGbn5cd5k0Te933A/1odYD5NtSpPGYeqBXzY5q8ZifJTnuvpH8Z + qEVrA8yPXH+jfFbS9wNgeVqdH1dJ+n6wMf9D1u00Sf8yUItWBtjwmPk7JX0fAJavlflxpDA/ynmdbCj2 + BkPNah9g3mXYt6FO9THzQM1qnx+vkQ8It7GXc7X4I8QN5TOl9IsANahxgO0qfsw8DxQF6lbj/NgsfgwG + 82Mx/pHM1P+R9AsBq1bTADtA/Jj5L0r6WgHUpcb5caOkrxXzu1I2/O7P0DdL+sWAVathgJ0gPGYeaE8N + 8+NEYX4sx3fLqP5A0i8IrNKqBpgfoPVa+bBwGyrQplXOj2+RPxTmx3L8pezwwYfr5c3UeC4QarPsAbaH + +DHzn5b09QBox6rmxxWSvh4sxhPytTJXPy3pFwdWZVkD7DDxbai3S/o6ALSH+TEN75a520u8fXz6DYBV + WPQAO13eJ49I+v0BtGsZ8+M3hfmxOrfIQVIk/0AflfQbAcu2iAHmuwR8G/slkn5PAH1gfvTN11d9mxTt + bZJ+M2DZSg6w/cSPmfeDstLvBaAvzI++/ZIUbze5VNJvCCxTiQF2nLxT7pX0ewDoU4n54RuE3iX3Sfo9 + sBqfEV+2s5AOl5sk/cbAsswzwPxx7oXCNhXANDE/+uS/zL5YFpo3S31A0hcALMOsA2x38WPm/UyI9OsB + mA7mR398y/u3ylJ6g/AgJ6zKRgfYc+QnxXcEpF8HwPQwP/rzI7LU3izpCwEWbb0BdpL4MfO8UwlgW8yP + vizkoueN9HOSviBgkdIA8+POz5SLhXcnAewI86Mf75HRW12UyGdf6QsDFmXtANtH3iTchgpgI5gffXi/ + 7CorzWdfftx3+gKBRfAA8x2Jft3d8fQxANgI5kf73it+NE81/SvhrUMsw1eEJ5MDGIP50ba3y0o/9tpR + 3yvsHg8AAEp6XHzzVdV9jdwo6RsAAPO7xX/0NN45BrAz3lHfF6k30SHCpnAAtvWw+Em6L5GhE4XbjgEk + l8vzpal8gdKPyyOSvikA03GzeB74L0c76mDxP+N/Nv0aAKbDT3d+h+wpzea/6X1c0jcIoG+fEO+WPcsQ + 2yzeeuCjkn5NAH27Xv6WdJH3Uvm3wlvcQP98seIH5etl3s6Q3xH/mun3AtAP3533C7KvdNeR4s//uegR + 6M994mesvEBK52sAzpe7JP3eANrm64ZPlu57tfyppEUA0JbrxLen7i+Lbj85R66V9LUAaMtfyetkcn2d + sPcK0KbL5GxZxRNZnyVnCXebAm26VPxnuMqHGi6z0+R9wh1jQN38Z9R/Vk+XWnq5+NH4zA+gbr6z60NS + 4vrA7jpMvD+LH3qUFg/AatwjflbPUVJrnh/nCrfRA3UZrg98odA67SF+a/0KSYsJYDk+J77mZm9ppWF+ + fFrS9wRgOXx9oP9ScpDQiHwbLNcJAcvVy+fznh8XCbfRA8uzyusDu+wE8VvwX5W04ADmk7ap6CXmB7BY + foaP/7Lhm5toQR0gfkv+i5J+CABm82XxtXc726ail5gfQFktXB/YXcPj8j8i6YcCYOfGbFPRS8Nt9MwP + YJwWrw/sMt+S67fuH5P0gwLwFN+G6mvqzhR6KuYHsHE8v6fSvNWG38q/U9IPDpiqRW5T0UtHCPMD2N5w + feAktqpoPW+k5rf2r5L0wwSmgttQZ2+YH5+VtKbAVNwqU7k+sLv8Ob/f6uc2ekwNt6HOH/MDU/Vxmer1 + gV32MvFHAA9K+oEDreM21MXF/EDvuD5wAh0qPC4fPeE21OU1zI8vSfpZAK3x9YGeH8cKTaThcfmfkvSi + AGrHbaira3dhfqBlXxCfzB8oNOF4XD5awm2odcX8QEs8P/wMvV2F6JmOFx6Xjxr1vE1FLw3z435JP0Ng + VR4Rn6S/Uoh22v7ijxZukPRiApZlSttU9BLzA7X4ipwvzxOimRoel++3DNOLC1iUKW9T0UvD/LhE0s8Y + WJRrhOsDqVjD4/J9q3F6wQHz4jbUfmN+YNH8rCqfbHN9IC0sHpeP0timYjoN8+MOSa8FYFYPiU+uXyxE + S8kfTfg22CslvSiB9bBNxXRjfmBewzYVBwvRSuJx+ZgV21TQkD+qYH5gFsP82CxE1eSPMHwbLI/Lx7bY + poLW6yTx/HhA0msI08X1gdRMPC4fA7apoFl7jnh+3CTpNYXpuFc8P44Roqby4/L9xM3/K+nFjX6xTQXN + G/Njuq4VnwQfIETNx+Pyp4FtKmgRMT+mgW0qqOuOEz+Z825JfwDQHrapoGXF/OiPt6nw/DhFiCbR8Lj8 + 6yX9oUD92KaCVtV+wvxo223ik9nnCtEk43H57WGbCqol5kd7PimeH3sJET3dacLj8uvEbahUe8yPenl+ + sE0F0QY6XHhcfh2GbSpeKEQtxPyox/3i+fEiIaIZ2kP8xM/PSPrDhcVhmwpqPebH6twiPgl9thDRHPG4 + /OVhmwrqLebH8jA/iBYYj8svj20qaCqdKMyPsobrA18tRLSEDhTfBsvj8sdjmwqaan7CMPNjPsP8OFqI + aAUNj8v/S0l/SLG9YZuKfYRoyjE/Zvd5YX4QVdbp4ttgH5P0B3fq2KaCaMcxP3aObSqIGuj54ieM3iXp + D/KUsE0F0WwxP7YY5sdLhYgayo/L9xNHr5b0h7tnbFNBNF9Tnx8+CTxSiKjhpvS4/MuFbSqIysX8IKIu + ern4yaQPSRoALWKbCqLlxPwgouY7TPwR0e2ShkIL2KaCaDUxP4io+bwj8Q/KxyUNiRpdJb4NdX8hotXF + /CCiLnqF/IrUuInivfJe+QbhNnai+mJ+EFHzbZZvE789fK2kgbIMN8p75LuEixKJ2oj5QUTddKz8E3m/ + 3Cpp2JTgvzn+jrxJvOcZEbUf84OIusnPxvgW+VH5ZflDuVJuk8clDSfz3RZfEX8G/8fivyGeK98u7KdD + NI2YH1RBmzb9f87FDAeDCxLjAAAAAElFTkSuQmCC + + + + 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 0000000..447c0f9 Binary files /dev/null and b/ConstructionCompany/ConstructionCompanyView/Logos/warehouseLogo.png differ 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 0000000..756449a Binary files /dev/null and b/ConstructionCompany/ConstructionCompanyView/Resources/cash-register-solid.png differ diff --git a/ConstructionCompany/ConstructionCompanyView/Resources/users-viewfinder-solid.png b/ConstructionCompany/ConstructionCompanyView/Resources/users-viewfinder-solid.png new file mode 100644 index 0000000..48ebae5 Binary files /dev/null and b/ConstructionCompany/ConstructionCompanyView/Resources/users-viewfinder-solid.png differ