Работает добавление, редактирование и удаление заказов

This commit is contained in:
Никита Потапов 2024-12-04 17:38:21 +04:00
parent e396435644
commit 0f80c8fa43
7 changed files with 184 additions and 35 deletions

View File

@ -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<string> ProductNames { get; set; } = new List<string>();
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;
}
}
}

View File

@ -15,6 +15,16 @@ namespace InternetShopContracts.DataViewModels
public List<string> ProductNames { get; set; } = new List<string>();
[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();
}
}
}
}

View File

@ -9,7 +9,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Components" Version="1.0.5" />
<PackageReference Include="Components" Version="1.0.6" />
<PackageReference Include="FixedWinFormsLibrary1" Version="1.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.0">
<PrivateAssets>all</PrivateAssets>

View File

@ -28,6 +28,7 @@
/// </summary>
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<string>)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;
}
}

View File

@ -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();
}
}
}

View File

@ -117,4 +117,12 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="productsList.CheckedItems" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAEAQAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5
c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVi
bGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24GAAAI
CAkCAAAAAAAAAAAAAAARAgAAAAAAAAAL
</value>
</data>
</root>

View File

@ -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<OrderViewModel>(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)
{