From 0f80c8fa43686f832031c52dd73c52a1796d7492 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=B8=D1=82=D0=B0=20=D0=9F=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=D0=BF=D0=BE=D0=B2?= Date: Wed, 4 Dec 2024 17:38:21 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5?= =?UTF-8?q?=D1=82=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5,=20=D1=80=D0=B5=D0=B4=D0=B0=D0=BA=D1=82=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B8=20=D1=83=D0=B4?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=B0=D0=BA=D0=B0?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataBindingModels/OrderBindingModel.cs | 14 ++- .../DataViewModels/OrderViewModel.cs | 12 ++- .../InternetShopForms.csproj | 2 +- .../Orders/FormOrderEdit.Designer.cs | 66 +++++++++--- .../InternetShopForms/Orders/FormOrderEdit.cs | 102 ++++++++++++++++-- .../Orders/FormOrderEdit.resx | 8 ++ .../Orders/FormOrdersList.cs | 15 ++- 7 files changed, 184 insertions(+), 35 deletions(-) diff --git a/InternetShop/InternetShopContracts/DataBindingModels/OrderBindingModel.cs b/InternetShop/InternetShopContracts/DataBindingModels/OrderBindingModel.cs index d194235..64c99cf 100644 --- a/InternetShop/InternetShopContracts/DataBindingModels/OrderBindingModel.cs +++ b/InternetShop/InternetShopContracts/DataBindingModels/OrderBindingModel.cs @@ -1,4 +1,5 @@ -using InternetShopDataModels.Models; +using InternetShopContracts.DataViewModels; +using InternetShopDataModels.Models; namespace InternetShopContracts.DataBindingModels { @@ -9,5 +10,16 @@ namespace InternetShopContracts.DataBindingModels public string ImagePath { get; set; } = string.Empty; public List ProductNames { get; set; } = new List(); public int Id { get; set; } + + public static OrderBindingModel FromViewModel(OrderViewModel viewModel) + { + OrderBindingModel model = new OrderBindingModel(); + model.Id = viewModel.Id; + model.CustomerFIO = viewModel.CustomerFIO; + model.CustomerEmail = viewModel.CustomerEmail; + model.ImagePath = viewModel.ImagePath; + model.ProductNames = viewModel.ProductNames; + return model; + } } } diff --git a/InternetShop/InternetShopContracts/DataViewModels/OrderViewModel.cs b/InternetShop/InternetShopContracts/DataViewModels/OrderViewModel.cs index 2cd887c..b699e09 100644 --- a/InternetShop/InternetShopContracts/DataViewModels/OrderViewModel.cs +++ b/InternetShop/InternetShopContracts/DataViewModels/OrderViewModel.cs @@ -15,6 +15,16 @@ namespace InternetShopContracts.DataViewModels public List ProductNames { get; set; } = new List(); [DisplayName("ID")] public int Id { get; set; } - public string ProductsString => string.Join(", ", ProductNames); + public string ProductsString + { + get + { + return string.Join(", ", ProductNames); + } + set + { + ProductNames = value.Split(',').Select(x => x.ToString().Trim()).ToList(); + } + } } } diff --git a/InternetShop/InternetShopForms/InternetShopForms.csproj b/InternetShop/InternetShopForms/InternetShopForms.csproj index 28539aa..bfc8ef2 100644 --- a/InternetShop/InternetShopForms/InternetShopForms.csproj +++ b/InternetShop/InternetShopForms/InternetShopForms.csproj @@ -9,7 +9,7 @@ - + all diff --git a/InternetShop/InternetShopForms/Orders/FormOrderEdit.Designer.cs b/InternetShop/InternetShopForms/Orders/FormOrderEdit.Designer.cs index 1d07bcc..3556099 100644 --- a/InternetShop/InternetShopForms/Orders/FormOrderEdit.Designer.cs +++ b/InternetShop/InternetShopForms/Orders/FormOrderEdit.Designer.cs @@ -28,6 +28,7 @@ /// private void InitializeComponent() { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormOrderEdit)); textBoxCustomerFIO = new TextBox(); labelCustomerFIO = new Label(); writeComponentCustomerEmail = new UserComponentsOption19.WriteComponent(); @@ -35,8 +36,10 @@ labelOrderImage = new Label(); textBoxImagePath = new TextBox(); buttonSelectImage = new Button(); - listBoxComponentProducts = new WinFormsLibrary1.List(); labelOrderProducts = new Label(); + buttonAccept = new Button(); + buttonCancel = new Button(); + productsList = new Components.UserControlCheckedList(); SuspendLayout(); // // textBoxCustomerFIO @@ -45,7 +48,7 @@ textBoxCustomerFIO.Location = new Point(133, 6); textBoxCustomerFIO.Name = "textBoxCustomerFIO"; textBoxCustomerFIO.PlaceholderText = "Иванов Иван Иванович"; - textBoxCustomerFIO.Size = new Size(688, 27); + textBoxCustomerFIO.Size = new Size(741, 27); textBoxCustomerFIO.TabIndex = 0; textBoxCustomerFIO.TextChanged += textBoxCustomerFIO_TextChanged; // @@ -63,7 +66,7 @@ writeComponentCustomerEmail.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; writeComponentCustomerEmail.Location = new Point(133, 39); writeComponentCustomerEmail.Name = "writeComponentCustomerEmail"; - writeComponentCustomerEmail.Size = new Size(688, 44); + writeComponentCustomerEmail.Size = new Size(741, 44); writeComponentCustomerEmail.TabIndex = 2; writeComponentCustomerEmail.Template = null; // @@ -90,14 +93,14 @@ textBoxImagePath.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; textBoxImagePath.Location = new Point(177, 83); textBoxImagePath.Name = "textBoxImagePath"; - textBoxImagePath.Size = new Size(544, 27); + textBoxImagePath.Size = new Size(597, 27); textBoxImagePath.TabIndex = 5; textBoxImagePath.TextChanged += textBoxImagePath_TextChanged; // // buttonSelectImage // buttonSelectImage.Anchor = AnchorStyles.Top | AnchorStyles.Right; - buttonSelectImage.Location = new Point(724, 82); + buttonSelectImage.Location = new Point(777, 82); buttonSelectImage.Name = "buttonSelectImage"; buttonSelectImage.Size = new Size(97, 29); buttonSelectImage.TabIndex = 6; @@ -105,15 +108,6 @@ buttonSelectImage.UseVisualStyleBackColor = true; buttonSelectImage.Click += buttonSelectImage_Click; // - // listBoxComponentProducts - // - listBoxComponentProducts.Location = new Point(-21, 117); - listBoxComponentProducts.Margin = new Padding(3, 4, 3, 4); - listBoxComponentProducts.Name = "listBoxComponentProducts"; - listBoxComponentProducts.SelectedItem = ""; - listBoxComponentProducts.Size = new Size(382, 371); - listBoxComponentProducts.TabIndex = 7; - // // labelOrderProducts // labelOrderProducts.AutoSize = true; @@ -123,13 +117,49 @@ labelOrderProducts.TabIndex = 8; labelOrderProducts.Text = "Продукты в заказе"; // + // buttonAccept + // + buttonAccept.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonAccept.Location = new Point(777, 382); + buttonAccept.Name = "buttonAccept"; + buttonAccept.Size = new Size(94, 29); + buttonAccept.TabIndex = 9; + buttonAccept.Text = "Сохранить"; + buttonAccept.UseVisualStyleBackColor = true; + buttonAccept.Click += buttonAccept_Click; + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(677, 382); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(94, 29); + buttonCancel.TabIndex = 10; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += buttonCancel_Click; + // + // productsList + // + productsList.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + productsList.BackColor = Color.Transparent; + productsList.CheckedItems = (List)resources.GetObject("productsList.CheckedItems"); + productsList.Location = new Point(12, 155); + productsList.Margin = new Padding(3, 4, 3, 4); + productsList.MaxCheckedItemsCount = 1; + productsList.Name = "productsList"; + productsList.Size = new Size(557, 255); + productsList.TabIndex = 11; + // // FormOrderEdit // AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(833, 382); + ClientSize = new Size(886, 423); + Controls.Add(productsList); + Controls.Add(buttonCancel); + Controls.Add(buttonAccept); Controls.Add(labelOrderProducts); - Controls.Add(listBoxComponentProducts); Controls.Add(buttonSelectImage); Controls.Add(textBoxImagePath); Controls.Add(labelOrderImage); @@ -154,7 +184,9 @@ private Label labelOrderImage; private TextBox textBoxImagePath; private Button buttonSelectImage; - private WinFormsLibrary1.List listBoxComponentProducts; private Label labelOrderProducts; + private Button buttonAccept; + private Button buttonCancel; + private Components.UserControlCheckedList productsList; } } \ No newline at end of file diff --git a/InternetShop/InternetShopForms/Orders/FormOrderEdit.cs b/InternetShop/InternetShopForms/Orders/FormOrderEdit.cs index cbb2088..0b23647 100644 --- a/InternetShop/InternetShopForms/Orders/FormOrderEdit.cs +++ b/InternetShop/InternetShopForms/Orders/FormOrderEdit.cs @@ -1,31 +1,42 @@ using DocumentFormat.OpenXml.Bibliography; +using InternetShopContracts.DataBindingModels; using InternetShopContracts.DataViewModels; using InternetShopContracts.LogicsContracts; +using System.Text.RegularExpressions; namespace InternetShopForms.Orders { public partial class FormOrderEdit : Form { private IOrderLogic _orderLogic; + private IProductLogic _productLogic; public int? OrderId; private bool IsFieldsChanged = false; + private bool IsFieldsSaved = false; private string OriginalTitle; - public FormOrderEdit(IOrderLogic orderLogic) + private bool IsFormLoaded = false; + public FormOrderEdit(IOrderLogic orderLogic, IProductLogic productLogic) { InitializeComponent(); _orderLogic = orderLogic; OriginalTitle = Text; writeComponentCustomerEmail.ChangeText += textBoxCustomerEmail_Changed; - listBoxComponentProducts.SelectedElementChange += listBoxProductsList_Changed; + productsList.CheckedItemChanged += listBoxProductsList_Changed; + _productLogic = productLogic; + productsList.MaxCheckedItemsCount = 1000; + writeComponentCustomerEmail.Template = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"); } private void FieldChanged() { - if (!IsFieldsChanged) + if (IsFormLoaded) { - Text = OriginalTitle + "*"; + if (!IsFieldsChanged) + { + Text = OriginalTitle + "*"; + } + IsFieldsChanged = true; } - IsFieldsChanged = true; } private void buttonSelectImage_Click(object sender, EventArgs e) @@ -51,13 +62,21 @@ namespace InternetShopForms.Orders private void FormOrderEdit_Load(object sender, EventArgs e) { + LoadProductsList(); if (OrderId != null) { - LoadData(); + LoadOrderData(); } + IsFormLoaded = true; } - private void LoadData() + private void LoadProductsList() + { + var products = _productLogic.ReadList(); + productsList.SetCheckedListBoxValues(products.Select(x => x.Name).ToList()); + } + + private void LoadOrderData() { OrderViewModel? orderViewModel = _orderLogic.ReadElement( new InternetShopContracts.DataSearchModels.OrderSearchModel { Id = OrderId } @@ -69,13 +88,13 @@ namespace InternetShopForms.Orders } textBoxCustomerFIO.Text = orderViewModel.CustomerFIO; textBoxImagePath.Text = orderViewModel.ImagePath; - writeComponentCustomerEmail.Text = orderViewModel.CustomerEmail; - listBoxComponentProducts.ListSet(orderViewModel.ProductNames.ToArray()); + writeComponentCustomerEmail.WriteTextInTextBox = orderViewModel.CustomerEmail; + productsList.CheckedItems = orderViewModel.ProductNames; } private void FormOrderEdit_FormClosing(object sender, FormClosingEventArgs e) { - if (IsFieldsChanged) + if (IsFieldsChanged && !IsFieldsSaved) { DialogResult result = MessageBox.Show("Изменения не сохранятся, вы хотите выйти?", "Предупреждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question); @@ -105,5 +124,68 @@ namespace InternetShopForms.Orders { FieldChanged(); } + + private void buttonAccept_Click(object sender, EventArgs e) + { + OrderBindingModel? orderBindingModel = new OrderBindingModel(); + if (OrderId == null) + { + orderBindingModel = new OrderBindingModel(); + } + else + { + var viewModel = _orderLogic.ReadElement(new InternetShopContracts.DataSearchModels.OrderSearchModel { Id = OrderId }); + if (viewModel == null) + { + throw new Exception("Заказ не найден"); + } + orderBindingModel = OrderBindingModel.FromViewModel(viewModel); + } + + orderBindingModel.CustomerFIO = textBoxCustomerFIO.Text; + try + { + orderBindingModel.CustomerEmail = writeComponentCustomerEmail.WriteTextInTextBox; + } + catch (Exception ex) + { + MessageBox.Show("Проверьте поле \"Email заказчика\":\n" + ex.Message); + return; + } + orderBindingModel.ImagePath = textBoxImagePath.Text; + orderBindingModel.ProductNames = productsList.CheckedItems; + + try + { + bool savedOK; + if (OrderId == null) + { + savedOK = _orderLogic.Create(orderBindingModel); + } + else + { + savedOK = _orderLogic.Update(orderBindingModel); + } + if (savedOK) + { + DialogResult = DialogResult.OK; + IsFieldsSaved = true; + Close(); + } + else + { + throw new Exception("Не удалось сохранить заказ"); + } + } + catch (Exception ex) + { + MessageBox.Show("Произошла ошибка при сохранении:\n" + ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + Close(); + } } } diff --git a/InternetShop/InternetShopForms/Orders/FormOrderEdit.resx b/InternetShop/InternetShopForms/Orders/FormOrderEdit.resx index 8b2ff64..38ed53c 100644 --- a/InternetShop/InternetShopForms/Orders/FormOrderEdit.resx +++ b/InternetShop/InternetShopForms/Orders/FormOrderEdit.resx @@ -117,4 +117,12 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + AAEAAAD/////AQAAAAAAAAAEAQAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5 + c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVi + bGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24GAAAI + CAkCAAAAAAAAAAAAAAARAgAAAAAAAAAL + + \ No newline at end of file diff --git a/InternetShop/InternetShopForms/Orders/FormOrdersList.cs b/InternetShop/InternetShopForms/Orders/FormOrdersList.cs index 1309353..e71e402 100644 --- a/InternetShop/InternetShopForms/Orders/FormOrdersList.cs +++ b/InternetShop/InternetShopForms/Orders/FormOrdersList.cs @@ -28,6 +28,7 @@ namespace InternetShopForms ]; tableComponent.ConfigureColumns(configureColumns); + tableComponent.dataGridView1.AllowUserToDeleteRows = false; tableComponent.dataGridView1.Columns[0].Visible = false; KeyPreview = true; @@ -52,7 +53,7 @@ namespace InternetShopForms try { var orders = _orderLogic.ReadList(); - tableComponent.FillData(orders); + tableComponent.FillData(orders); } catch (Exception ex) { @@ -156,12 +157,16 @@ namespace InternetShopForms if (result == DialogResult.Yes) { - _orderLogic.Delete(new OrderSearchModel { Id = selectedOrder.Id }); - MessageBox.Show(" "); + if(_orderLogic.Delete(new OrderSearchModel { Id = selectedOrder.Id })) + { + MessageBox.Show(" "); + } + else + { + throw new Exception(" "); + } LoadData(); } - LoadData(); - } catch (Exception ex) {