diff --git a/CarpentryWorkshop/CarpentryWorkshop/FormCreateOrder.Designer.cs b/CarpentryWorkshop/CarpentryWorkshop/FormCreateOrder.Designer.cs index 3b9f590..2e159bf 100644 --- a/CarpentryWorkshop/CarpentryWorkshop/FormCreateOrder.Designer.cs +++ b/CarpentryWorkshop/CarpentryWorkshop/FormCreateOrder.Designer.cs @@ -28,119 +28,127 @@ /// private void InitializeComponent() { - this.labelCount = new System.Windows.Forms.Label(); - this.comboBoxWood = new System.Windows.Forms.ComboBox(); - this.buttonCancel = new System.Windows.Forms.Button(); - this.buttonSave = new System.Windows.Forms.Button(); - this.textBoxCount = new System.Windows.Forms.TextBox(); - this.labelProduct = new System.Windows.Forms.Label(); - this.labelSum = new System.Windows.Forms.Label(); - this.textBoxSum = new System.Windows.Forms.TextBox(); - this.SuspendLayout(); + labelCount = new Label(); + comboBoxWood = new ComboBox(); + buttonCancel = new Button(); + buttonSave = new Button(); + textBoxCount = new TextBox(); + labelProduct = new Label(); + labelSum = new Label(); + textBoxSum = new TextBox(); + SuspendLayout(); // // labelCount // - this.labelCount.AutoSize = true; - this.labelCount.Location = new System.Drawing.Point(12, 36); - this.labelCount.Name = "labelCount"; - this.labelCount.Size = new System.Drawing.Size(69, 13); - this.labelCount.TabIndex = 2; - this.labelCount.Text = "Количество:"; + labelCount.AutoSize = true; + labelCount.Location = new Point(14, 42); + labelCount.Margin = new Padding(4, 0, 4, 0); + labelCount.Name = "labelCount"; + labelCount.Size = new Size(75, 15); + labelCount.TabIndex = 2; + labelCount.Text = "Количество:"; // // comboBoxWood // - this.comboBoxWood.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBoxWood.FormattingEnabled = true; - this.comboBoxWood.Location = new System.Drawing.Point(87, 6); - this.comboBoxWood.Name = "comboBoxWood"; - this.comboBoxWood.Size = new System.Drawing.Size(217, 21); - this.comboBoxWood.TabIndex = 1; - this.comboBoxWood.SelectedIndexChanged += new System.EventHandler(this.comboBoxWood_SelectedIndexChanged); + comboBoxWood.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxWood.FormattingEnabled = true; + comboBoxWood.Location = new Point(102, 7); + comboBoxWood.Margin = new Padding(4, 3, 4, 3); + comboBoxWood.Name = "comboBoxWood"; + comboBoxWood.Size = new Size(252, 23); + comboBoxWood.TabIndex = 1; + comboBoxWood.SelectedIndexChanged += comboBoxWood_SelectedIndexChanged; // // buttonCancel // - this.buttonCancel.Location = new System.Drawing.Point(219, 85); - this.buttonCancel.Name = "buttonCancel"; - this.buttonCancel.Size = new System.Drawing.Size(75, 23); - this.buttonCancel.TabIndex = 7; - this.buttonCancel.Text = "Отмена"; - this.buttonCancel.UseVisualStyleBackColor = true; - this.buttonCancel.Click += new System.EventHandler(this.ButtonCancel_Click); + buttonCancel.Location = new Point(255, 98); + buttonCancel.Margin = new Padding(4, 3, 4, 3); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(88, 27); + buttonCancel.TabIndex = 7; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; // // buttonSave // - this.buttonSave.Location = new System.Drawing.Point(138, 85); - this.buttonSave.Name = "buttonSave"; - this.buttonSave.Size = new System.Drawing.Size(75, 23); - this.buttonSave.TabIndex = 6; - this.buttonSave.Text = "Сохранить"; - this.buttonSave.UseVisualStyleBackColor = true; - this.buttonSave.Click += new System.EventHandler(this.ButtonSave_Click); + buttonSave.Location = new Point(161, 98); + buttonSave.Margin = new Padding(4, 3, 4, 3); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(88, 27); + buttonSave.TabIndex = 6; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; // // textBoxCount // - this.textBoxCount.Location = new System.Drawing.Point(87, 33); - this.textBoxCount.Name = "textBoxCount"; - this.textBoxCount.Size = new System.Drawing.Size(217, 20); - this.textBoxCount.TabIndex = 3; - this.textBoxCount.TextChanged += new System.EventHandler(this.textBoxCount_TextChanged); + textBoxCount.Location = new Point(102, 38); + textBoxCount.Margin = new Padding(4, 3, 4, 3); + textBoxCount.Name = "textBoxCount"; + textBoxCount.Size = new Size(252, 23); + textBoxCount.TabIndex = 3; + textBoxCount.TextChanged += textBoxCount_TextChanged; // // labelProduct // - this.labelProduct.AutoSize = true; - this.labelProduct.Location = new System.Drawing.Point(12, 9); - this.labelProduct.Name = "labelProduct"; - this.labelProduct.Size = new System.Drawing.Size(54, 13); - this.labelProduct.TabIndex = 0; - this.labelProduct.Text = "Изделие:"; + labelProduct.AutoSize = true; + labelProduct.Location = new Point(14, 10); + labelProduct.Margin = new Padding(4, 0, 4, 0); + labelProduct.Name = "labelProduct"; + labelProduct.Size = new Size(56, 15); + labelProduct.TabIndex = 0; + labelProduct.Text = "Изделие:"; // // labelSum // - this.labelSum.AutoSize = true; - this.labelSum.Location = new System.Drawing.Point(12, 62); - this.labelSum.Name = "labelSum"; - this.labelSum.Size = new System.Drawing.Size(44, 13); - this.labelSum.TabIndex = 4; - this.labelSum.Text = "Сумма:"; + labelSum.AutoSize = true; + labelSum.Location = new Point(14, 72); + labelSum.Margin = new Padding(4, 0, 4, 0); + labelSum.Name = "labelSum"; + labelSum.Size = new Size(48, 15); + labelSum.TabIndex = 4; + labelSum.Text = "Сумма:"; // // textBoxSum // - this.textBoxSum.Location = new System.Drawing.Point(87, 59); - this.textBoxSum.Name = "textBoxSum"; - this.textBoxSum.ReadOnly = true; - this.textBoxSum.Size = new System.Drawing.Size(217, 20); - this.textBoxSum.TabIndex = 5; + textBoxSum.Location = new Point(102, 68); + textBoxSum.Margin = new Padding(4, 3, 4, 3); + textBoxSum.Name = "textBoxSum"; + textBoxSum.ReadOnly = true; + textBoxSum.Size = new Size(252, 23); + textBoxSum.TabIndex = 5; // // FormCreateOrder // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(318, 118); - this.Controls.Add(this.labelSum); - this.Controls.Add(this.textBoxSum); - this.Controls.Add(this.labelCount); - this.Controls.Add(this.comboBoxWood); - this.Controls.Add(this.buttonCancel); - this.Controls.Add(this.buttonSave); - this.Controls.Add(this.textBoxCount); - this.Controls.Add(this.labelProduct); - this.Name = "FormCreateOrder"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Заказ"; - this.Load += new System.EventHandler(this.FormCreateOrder_Load); - this.ResumeLayout(false); - this.PerformLayout(); - + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(371, 136); + Controls.Add(labelSum); + Controls.Add(textBoxSum); + Controls.Add(labelCount); + Controls.Add(comboBoxWood); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(textBoxCount); + Controls.Add(labelProduct); + Margin = new Padding(4, 3, 4, 3); + Name = "FormCreateOrder"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Заказ"; + Load += FormCreateOrder_Load; + ResumeLayout(false); + PerformLayout(); } #endregion - private System.Windows.Forms.Label labelCount; - private System.Windows.Forms.ComboBox comboBoxWood; - private System.Windows.Forms.Button buttonCancel; - private System.Windows.Forms.Button buttonSave; - private System.Windows.Forms.TextBox textBoxCount; - private System.Windows.Forms.Label labelProduct; - private System.Windows.Forms.Label labelSum; - private System.Windows.Forms.TextBox textBoxSum; + private Label labelCount; + private ComboBox comboBoxWood; + private Button buttonCancel; + private Button buttonSave; + private TextBox textBoxCount; + private Label labelProduct; + private Label labelSum; + private TextBox textBoxSum; } } \ No newline at end of file diff --git a/CarpentryWorkshop/CarpentryWorkshop/FormCreateOrder.cs b/CarpentryWorkshop/CarpentryWorkshop/FormCreateOrder.cs index 7bd71e3..9e8e96c 100644 --- a/CarpentryWorkshop/CarpentryWorkshop/FormCreateOrder.cs +++ b/CarpentryWorkshop/CarpentryWorkshop/FormCreateOrder.cs @@ -34,7 +34,7 @@ namespace CarpentryWorkshopView var list = _logicW.ReadList(null); if (list != null) { - comboBoxWood.DisplayMember = "ManufactureName"; + comboBoxWood.DisplayMember = "WoodName"; comboBoxWood.ValueMember = "Id"; comboBoxWood.DataSource = list; comboBoxWood.SelectedItem = null; @@ -93,7 +93,6 @@ namespace CarpentryWorkshopView var operationResult = _logicO.CreateOrder(new OrderBindingModel { WoodId = Convert.ToInt32(comboBoxWood.SelectedValue), - WoodName = comboBoxWood.Text, Count = Convert.ToInt32(textBoxCount.Text), Sum = Convert.ToDouble(textBoxSum.Text) }); diff --git a/CarpentryWorkshop/CarpentryWorkshop/FormMain.cs b/CarpentryWorkshop/CarpentryWorkshop/FormMain.cs index ea377d9..9c3fba9 100644 --- a/CarpentryWorkshop/CarpentryWorkshop/FormMain.cs +++ b/CarpentryWorkshop/CarpentryWorkshop/FormMain.cs @@ -1,16 +1,8 @@ using CarpentryWorkshop; using CarpentryWorkshopContracts.BindingModels; using CarpentryWorkshopContracts.BusinessLogicsContracts; +using CarpentryWorkshopDataModels.Enums; 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 CarpentryWorkshopView { @@ -38,7 +30,8 @@ namespace CarpentryWorkshopView if (list != null) { dataGridView.DataSource = list; - dataGridView.Columns[1].Visible = false; + dataGridView.Columns["WoodId"].Visible = false; + dataGridView.Columns["WoodName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; } _logger.LogInformation("Загрузка продуктов"); @@ -75,6 +68,20 @@ namespace CarpentryWorkshopView LoadData(); } } + + private OrderBindingModel CreateBindingModel(int id, bool isDone = false) + { + return new OrderBindingModel + { + Id = id, + WoodId = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["WoodId"].Value), + Status = Enum.Parse(dataGridView.SelectedRows[0].Cells["Status"].Value.ToString()), + Count = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Count"].Value), + Sum = double.Parse(dataGridView.SelectedRows[0].Cells["Sum"].Value.ToString()), + DateCreate = DateTime.Parse(dataGridView.SelectedRows[0].Cells["DateCreate"].Value.ToString()), + }; + } + private void ButtonTakeOrderInWork_Click(object sender, EventArgs e) { if (dataGridView.SelectedRows.Count == 1) @@ -83,7 +90,7 @@ namespace CarpentryWorkshopView _logger.LogInformation("Заказ №{id}. Меняется статус на 'В работе'", id); try { - var operationResult = _orderLogic.TakeOrderInWork(new OrderBindingModel { Id = id }); + var operationResult = _orderLogic.TakeOrderInWork(CreateBindingModel(id)); if (!operationResult) { throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); @@ -105,7 +112,7 @@ namespace CarpentryWorkshopView _logger.LogInformation("Заказ №{id}. Меняется статус на 'Готов'", id); try { - var operationResult = _orderLogic.FinishOrder(new OrderBindingModel { Id = id }); + var operationResult = _orderLogic.FinishOrder(CreateBindingModel(id)); if (!operationResult) { throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); @@ -126,7 +133,7 @@ namespace CarpentryWorkshopView _logger.LogInformation("Заказ №{id}. Меняется статус на 'Выдан'", id); try { - var operationResult = _orderLogic.DeliveryOrder(new OrderBindingModel { Id = id }); + var operationResult = _orderLogic.DeliveryOrder(CreateBindingModel(id)); if (!operationResult) { throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); diff --git a/CarpentryWorkshop/CarpentryWorkshop/FormWood.Designer.cs b/CarpentryWorkshop/CarpentryWorkshop/FormWood.Designer.cs index c039c4b..1771f2f 100644 --- a/CarpentryWorkshop/CarpentryWorkshop/FormWood.Designer.cs +++ b/CarpentryWorkshop/CarpentryWorkshop/FormWood.Designer.cs @@ -34,15 +34,15 @@ textBoxPrice = new TextBox(); groupBox1 = new GroupBox(); dataGridView = new DataGridView(); + ID = new DataGridViewTextBoxColumn(); + ComponentName = new DataGridViewTextBoxColumn(); + Count = new DataGridViewTextBoxColumn(); ButtonRef = new Button(); ButtonDel = new Button(); ButtonUpd = new Button(); ButtonAdd = new Button(); ButtonSave = new Button(); ButtonCancel = new Button(); - ID = new DataGridViewTextBoxColumn(); - ComponentName = new DataGridViewTextBoxColumn(); - Count = new DataGridViewTextBoxColumn(); groupBox1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); SuspendLayout(); @@ -76,6 +76,7 @@ // textBoxPrice.Location = new Point(94, 38); textBoxPrice.Name = "textBoxPrice"; + textBoxPrice.ReadOnly = true; textBoxPrice.Size = new Size(100, 23); textBoxPrice.TabIndex = 3; // @@ -104,6 +105,24 @@ dataGridView.Size = new Size(394, 311); dataGridView.TabIndex = 5; // + // ID + // + ID.HeaderText = "Id"; + ID.Name = "ID"; + ID.Visible = false; + ID.Width = 250; + // + // ComponentName + // + ComponentName.HeaderText = "Компонент"; + ComponentName.Name = "ComponentName"; + ComponentName.Width = 250; + // + // Count + // + Count.HeaderText = "Количество"; + Count.Name = "Count"; + // // ButtonRef // ButtonRef.Location = new Point(400, 169); @@ -164,24 +183,6 @@ ButtonCancel.UseVisualStyleBackColor = true; ButtonCancel.Click += ButtonCancel_Click; // - // ID - // - ID.HeaderText = "Id"; - ID.Name = "ID"; - ID.Visible = false; - ID.Width = 250; - // - // ComponentName - // - ComponentName.HeaderText = "Компонент"; - ComponentName.Name = "ComponentName"; - ComponentName.Width = 250; - // - // Count - // - Count.HeaderText = "Количество"; - Count.Name = "Count"; - // // FormWood // AutoScaleDimensions = new SizeF(7F, 15F); diff --git a/CarpentryWorkshop/CarpentryWorkshop/FormWoodComponent.Designer.cs b/CarpentryWorkshop/CarpentryWorkshop/FormWoodComponent.Designer.cs index e06c6ad..644bad9 100644 --- a/CarpentryWorkshop/CarpentryWorkshop/FormWoodComponent.Designer.cs +++ b/CarpentryWorkshop/CarpentryWorkshop/FormWoodComponent.Designer.cs @@ -63,6 +63,7 @@ // // comboBoxComponent // + comboBoxComponent.DropDownStyle = ComboBoxStyle.DropDownList; comboBoxComponent.BackColor = SystemColors.Window; comboBoxComponent.FormattingEnabled = true; comboBoxComponent.Location = new Point(90, 6); diff --git a/CarpentryWorkshop/CarpentryWorkshopBusinessLogic/BusinessLogics/OrderLogic.cs b/CarpentryWorkshop/CarpentryWorkshopBusinessLogic/BusinessLogics/OrderLogic.cs index 1166d01..66a3eee 100644 --- a/CarpentryWorkshop/CarpentryWorkshopBusinessLogic/BusinessLogics/OrderLogic.cs +++ b/CarpentryWorkshop/CarpentryWorkshopBusinessLogic/BusinessLogics/OrderLogic.cs @@ -12,15 +12,18 @@ namespace CarpentryWorkshopBusinessLogic.BusinessLogics { private readonly ILogger _logger; private readonly IOrderStorage _orderStorage; + public OrderLogic(ILogger logger, IOrderStorage orderStorage) { _logger = logger; _orderStorage = orderStorage; } + public List? ReadList(OrderSearchModel? model) { _logger.LogInformation("ReadList. Id:{ Id}", model?.Id); - var list = model == null ? _orderStorage.GetFullList() : _orderStorage.GetFilteredList(model); + var list = model == null ? _orderStorage.GetFullList() : + _orderStorage.GetFilteredList(model); if (list == null) { _logger.LogWarning("ReadList return null list"); @@ -29,102 +32,75 @@ namespace CarpentryWorkshopBusinessLogic.BusinessLogics _logger.LogInformation("ReadList. Count:{Count}", list.Count); return list; } + public bool CreateOrder(OrderBindingModel model) { - _orderStorage.Insert(new OrderBindingModel + CheckModel(model); + if (model.Status != OrderStatus.Неизвестен) return false; + model.Status = OrderStatus.Принят; + if (_orderStorage.Insert(model) == null) { - WoodId = model.WoodId, - WoodName = model.WoodName, - Count = model.Count, - Sum = model.Sum, - Status = OrderStatus.Принят, - DateCreate = DateTime.Now - }); ; + _logger.LogWarning("Insert operation failed"); + return false; + } return true; } + + public bool ChangeStatus(OrderBindingModel model, OrderStatus status) + { + CheckModel(model); + var element = _orderStorage.GetElement(new OrderSearchModel { Id = model.Id }); + if (element == null) + { + _logger.LogWarning("Read operation failed"); + return false; + } + if (element.Status != status - 1) + { + _logger.LogWarning("Status change operation failed"); + throw new InvalidOperationException("Текущий статус заказа не может быть переведен в выбранный"); + } + model.Status = status; + if (model.Status == OrderStatus.Выдан) model.DateImplement = DateTime.Now; + _orderStorage.Update(model); + return true; + } + public bool TakeOrderInWork(OrderBindingModel model) { - var order = _orderStorage.GetElement(new OrderSearchModel - { - Id = model.Id - }); - if (order == null) - { - throw new Exception("Элемент не найден"); - } - if (order.Status.ToString() != "Принят") - { - throw new Exception("Заказ не в статусе \"Принят\""); - } - _orderStorage.Update(new OrderBindingModel - { - Id = order.Id, - WoodId = order.WoodId, - WoodName = order.WoodName, - Count = order.Count, - Sum = order.Sum, - DateCreate = order.DateCreate, - - Status = OrderStatus.Выполняется - }); - return true; + return ChangeStatus(model, OrderStatus.Выполняется); } + public bool FinishOrder(OrderBindingModel model) { - var order = _orderStorage.GetElement(new OrderSearchModel - { - Id = model.Id - }); - if (order == null) - { - throw new Exception("Не найден заказ"); - } - if (order.Status.ToString() != "Выполняется") - { - throw new Exception("Заказ не в статусе \"Выполняется\""); - } - _orderStorage.Update(new OrderBindingModel - { - Id = order.Id, - WoodId = order.WoodId, - WoodName = order.WoodName, - Count = order.Count, - Sum = order.Sum, - DateCreate = order.DateCreate, - DateImplement = DateTime.Now, - Status = OrderStatus.Готов - }); - return true; + return ChangeStatus(model, OrderStatus.Готов); } + public bool DeliveryOrder(OrderBindingModel model) { - var order = _orderStorage.GetElement(new OrderSearchModel + return ChangeStatus(model, OrderStatus.Выдан); + } + + private void CheckModel(OrderBindingModel model, bool withParams = +true) + { + if (model == null) { - Id = model.Id - }); - if (order == null) - { - throw new Exception("Не найден заказ"); + throw new ArgumentNullException(nameof(model)); } - - if (order.Status.ToString() != "Готов") + if (!withParams) { - throw new Exception("Заказ не в статусе \"Готов\""); + return; } - - _orderStorage.Update(new OrderBindingModel + if (model.Sum <= 0) { - Id = order.Id, - WoodId = order.WoodId, - WoodName = order.WoodName, - Count = order.Count, - Sum = order.Sum, - DateCreate = order.DateCreate, - DateImplement = order.DateImplement, - Status = OrderStatus.Выдан - }); - return true; - + throw new ArgumentNullException("Цена заказа должна быть больше 0", nameof(model.Sum)); + } + if (model.Count <= 0) + { + throw new ArgumentNullException("Количество элементов в заказе должно быть больше 0", nameof(model.Count)); + } + _logger.LogInformation("Order. Sum:{ Cost}. Id: { Id}", model.Sum, model.Id); } } -} \ No newline at end of file +} diff --git a/CarpentryWorkshop/CarpentryWorkshopContracts/BindingModels/OrderBindingModel.cs b/CarpentryWorkshop/CarpentryWorkshopContracts/BindingModels/OrderBindingModel.cs index b814e83..5421843 100644 --- a/CarpentryWorkshop/CarpentryWorkshopContracts/BindingModels/OrderBindingModel.cs +++ b/CarpentryWorkshop/CarpentryWorkshopContracts/BindingModels/OrderBindingModel.cs @@ -7,7 +7,6 @@ namespace CarpentryWorkshopContracts.BindingModels { public int Id { get; set; } public int WoodId { get; set; } - public string WoodName { get; set; } = string.Empty; public int Count { get; set; } public double Sum { get; set; } public OrderStatus Status { get; set; } = OrderStatus.Неизвестен; diff --git a/CarpentryWorkshop/CarpentryWorkshopListImplement/Implements/OrderStorage.cs b/CarpentryWorkshop/CarpentryWorkshopListImplement/Implements/OrderStorage.cs index b7c740f..9cf7e8a 100644 --- a/CarpentryWorkshop/CarpentryWorkshopListImplement/Implements/OrderStorage.cs +++ b/CarpentryWorkshop/CarpentryWorkshopListImplement/Implements/OrderStorage.cs @@ -18,7 +18,7 @@ namespace CarpentryWorkshopListImplement.Implements var result = new List(); foreach (var order in _source.Orders) { - result.Add(order.GetViewModel); + result.Add(AccessWoodStorage(order.GetViewModel)); } return result; } @@ -33,7 +33,7 @@ namespace CarpentryWorkshopListImplement.Implements { if (order.Id.Equals(model.Id)) { - result.Add(order.GetViewModel); + result.Add(AccessWoodStorage(order.GetViewModel)); } } return result; @@ -97,5 +97,18 @@ namespace CarpentryWorkshopListImplement.Implements } return null; } + + public OrderViewModel AccessWoodStorage(OrderViewModel model) + { + foreach (var wood in _source.Woods) + { + if (wood.Id == model.WoodId) + { + model.WoodName = wood.WoodName; + break; + } + } + return model; + } } } \ No newline at end of file