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

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 namespace InternetShopContracts.DataBindingModels
{ {
@ -9,5 +10,16 @@ namespace InternetShopContracts.DataBindingModels
public string ImagePath { get; set; } = string.Empty; public string ImagePath { get; set; } = string.Empty;
public List<string> ProductNames { get; set; } = new List<string>(); public List<string> ProductNames { get; set; } = new List<string>();
public int Id { get; set; } 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>(); public List<string> ProductNames { get; set; } = new List<string>();
[DisplayName("ID")] [DisplayName("ID")]
public int Id { get; set; } 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> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Components" Version="1.0.5" /> <PackageReference Include="Components" Version="1.0.6" />
<PackageReference Include="FixedWinFormsLibrary1" Version="1.0.2" /> <PackageReference Include="FixedWinFormsLibrary1" Version="1.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.0"> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.0">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>

View File

@ -28,6 +28,7 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormOrderEdit));
textBoxCustomerFIO = new TextBox(); textBoxCustomerFIO = new TextBox();
labelCustomerFIO = new Label(); labelCustomerFIO = new Label();
writeComponentCustomerEmail = new UserComponentsOption19.WriteComponent(); writeComponentCustomerEmail = new UserComponentsOption19.WriteComponent();
@ -35,8 +36,10 @@
labelOrderImage = new Label(); labelOrderImage = new Label();
textBoxImagePath = new TextBox(); textBoxImagePath = new TextBox();
buttonSelectImage = new Button(); buttonSelectImage = new Button();
listBoxComponentProducts = new WinFormsLibrary1.List();
labelOrderProducts = new Label(); labelOrderProducts = new Label();
buttonAccept = new Button();
buttonCancel = new Button();
productsList = new Components.UserControlCheckedList();
SuspendLayout(); SuspendLayout();
// //
// textBoxCustomerFIO // textBoxCustomerFIO
@ -45,7 +48,7 @@
textBoxCustomerFIO.Location = new Point(133, 6); textBoxCustomerFIO.Location = new Point(133, 6);
textBoxCustomerFIO.Name = "textBoxCustomerFIO"; textBoxCustomerFIO.Name = "textBoxCustomerFIO";
textBoxCustomerFIO.PlaceholderText = "Иванов Иван Иванович"; textBoxCustomerFIO.PlaceholderText = "Иванов Иван Иванович";
textBoxCustomerFIO.Size = new Size(688, 27); textBoxCustomerFIO.Size = new Size(741, 27);
textBoxCustomerFIO.TabIndex = 0; textBoxCustomerFIO.TabIndex = 0;
textBoxCustomerFIO.TextChanged += textBoxCustomerFIO_TextChanged; textBoxCustomerFIO.TextChanged += textBoxCustomerFIO_TextChanged;
// //
@ -63,7 +66,7 @@
writeComponentCustomerEmail.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; writeComponentCustomerEmail.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
writeComponentCustomerEmail.Location = new Point(133, 39); writeComponentCustomerEmail.Location = new Point(133, 39);
writeComponentCustomerEmail.Name = "writeComponentCustomerEmail"; writeComponentCustomerEmail.Name = "writeComponentCustomerEmail";
writeComponentCustomerEmail.Size = new Size(688, 44); writeComponentCustomerEmail.Size = new Size(741, 44);
writeComponentCustomerEmail.TabIndex = 2; writeComponentCustomerEmail.TabIndex = 2;
writeComponentCustomerEmail.Template = null; writeComponentCustomerEmail.Template = null;
// //
@ -90,14 +93,14 @@
textBoxImagePath.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; textBoxImagePath.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
textBoxImagePath.Location = new Point(177, 83); textBoxImagePath.Location = new Point(177, 83);
textBoxImagePath.Name = "textBoxImagePath"; textBoxImagePath.Name = "textBoxImagePath";
textBoxImagePath.Size = new Size(544, 27); textBoxImagePath.Size = new Size(597, 27);
textBoxImagePath.TabIndex = 5; textBoxImagePath.TabIndex = 5;
textBoxImagePath.TextChanged += textBoxImagePath_TextChanged; textBoxImagePath.TextChanged += textBoxImagePath_TextChanged;
// //
// buttonSelectImage // buttonSelectImage
// //
buttonSelectImage.Anchor = AnchorStyles.Top | AnchorStyles.Right; buttonSelectImage.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonSelectImage.Location = new Point(724, 82); buttonSelectImage.Location = new Point(777, 82);
buttonSelectImage.Name = "buttonSelectImage"; buttonSelectImage.Name = "buttonSelectImage";
buttonSelectImage.Size = new Size(97, 29); buttonSelectImage.Size = new Size(97, 29);
buttonSelectImage.TabIndex = 6; buttonSelectImage.TabIndex = 6;
@ -105,15 +108,6 @@
buttonSelectImage.UseVisualStyleBackColor = true; buttonSelectImage.UseVisualStyleBackColor = true;
buttonSelectImage.Click += buttonSelectImage_Click; 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
// //
labelOrderProducts.AutoSize = true; labelOrderProducts.AutoSize = true;
@ -123,13 +117,49 @@
labelOrderProducts.TabIndex = 8; labelOrderProducts.TabIndex = 8;
labelOrderProducts.Text = "Продукты в заказе"; 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 // FormOrderEdit
// //
AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font; 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(labelOrderProducts);
Controls.Add(listBoxComponentProducts);
Controls.Add(buttonSelectImage); Controls.Add(buttonSelectImage);
Controls.Add(textBoxImagePath); Controls.Add(textBoxImagePath);
Controls.Add(labelOrderImage); Controls.Add(labelOrderImage);
@ -154,7 +184,9 @@
private Label labelOrderImage; private Label labelOrderImage;
private TextBox textBoxImagePath; private TextBox textBoxImagePath;
private Button buttonSelectImage; private Button buttonSelectImage;
private WinFormsLibrary1.List listBoxComponentProducts;
private Label labelOrderProducts; private Label labelOrderProducts;
private Button buttonAccept;
private Button buttonCancel;
private Components.UserControlCheckedList productsList;
} }
} }

View File

@ -1,31 +1,42 @@
using DocumentFormat.OpenXml.Bibliography; using DocumentFormat.OpenXml.Bibliography;
using InternetShopContracts.DataBindingModels;
using InternetShopContracts.DataViewModels; using InternetShopContracts.DataViewModels;
using InternetShopContracts.LogicsContracts; using InternetShopContracts.LogicsContracts;
using System.Text.RegularExpressions;
namespace InternetShopForms.Orders namespace InternetShopForms.Orders
{ {
public partial class FormOrderEdit : Form public partial class FormOrderEdit : Form
{ {
private IOrderLogic _orderLogic; private IOrderLogic _orderLogic;
private IProductLogic _productLogic;
public int? OrderId; public int? OrderId;
private bool IsFieldsChanged = false; private bool IsFieldsChanged = false;
private bool IsFieldsSaved = false;
private string OriginalTitle; private string OriginalTitle;
public FormOrderEdit(IOrderLogic orderLogic) private bool IsFormLoaded = false;
public FormOrderEdit(IOrderLogic orderLogic, IProductLogic productLogic)
{ {
InitializeComponent(); InitializeComponent();
_orderLogic = orderLogic; _orderLogic = orderLogic;
OriginalTitle = Text; OriginalTitle = Text;
writeComponentCustomerEmail.ChangeText += textBoxCustomerEmail_Changed; 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() 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) private void buttonSelectImage_Click(object sender, EventArgs e)
@ -51,13 +62,21 @@ namespace InternetShopForms.Orders
private void FormOrderEdit_Load(object sender, EventArgs e) private void FormOrderEdit_Load(object sender, EventArgs e)
{ {
LoadProductsList();
if (OrderId != null) 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( OrderViewModel? orderViewModel = _orderLogic.ReadElement(
new InternetShopContracts.DataSearchModels.OrderSearchModel { Id = OrderId } new InternetShopContracts.DataSearchModels.OrderSearchModel { Id = OrderId }
@ -69,13 +88,13 @@ namespace InternetShopForms.Orders
} }
textBoxCustomerFIO.Text = orderViewModel.CustomerFIO; textBoxCustomerFIO.Text = orderViewModel.CustomerFIO;
textBoxImagePath.Text = orderViewModel.ImagePath; textBoxImagePath.Text = orderViewModel.ImagePath;
writeComponentCustomerEmail.Text = orderViewModel.CustomerEmail; writeComponentCustomerEmail.WriteTextInTextBox = orderViewModel.CustomerEmail;
listBoxComponentProducts.ListSet(orderViewModel.ProductNames.ToArray()); productsList.CheckedItems = orderViewModel.ProductNames;
} }
private void FormOrderEdit_FormClosing(object sender, FormClosingEventArgs e) private void FormOrderEdit_FormClosing(object sender, FormClosingEventArgs e)
{ {
if (IsFieldsChanged) if (IsFieldsChanged && !IsFieldsSaved)
{ {
DialogResult result = MessageBox.Show("Изменения не сохранятся, вы хотите выйти?", DialogResult result = MessageBox.Show("Изменения не сохранятся, вы хотите выйти?",
"Предупреждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question); "Предупреждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
@ -105,5 +124,68 @@ namespace InternetShopForms.Orders
{ {
FieldChanged(); 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"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="productsList.CheckedItems" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAEAQAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5
c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVi
bGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24GAAAI
CAkCAAAAAAAAAAAAAAARAgAAAAAAAAAL
</value>
</data>
</root> </root>

View File

@ -28,6 +28,7 @@ namespace InternetShopForms
]; ];
tableComponent.ConfigureColumns(configureColumns); tableComponent.ConfigureColumns(configureColumns);
tableComponent.dataGridView1.AllowUserToDeleteRows = false;
tableComponent.dataGridView1.Columns[0].Visible = false; tableComponent.dataGridView1.Columns[0].Visible = false;
KeyPreview = true; KeyPreview = true;
@ -52,7 +53,7 @@ namespace InternetShopForms
try try
{ {
var orders = _orderLogic.ReadList(); var orders = _orderLogic.ReadList();
tableComponent.FillData<OrderViewModel>(orders); tableComponent.FillData(orders);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -156,12 +157,16 @@ namespace InternetShopForms
if (result == DialogResult.Yes) if (result == DialogResult.Yes)
{ {
_orderLogic.Delete(new OrderSearchModel { Id = selectedOrder.Id }); if(_orderLogic.Delete(new OrderSearchModel { Id = selectedOrder.Id }))
MessageBox.Show("Çàêàç óäàëåí"); {
MessageBox.Show("Çàêàç óäàëåí");
}
else
{
throw new Exception("Îøèáêà óäàëåíèÿ");
}
LoadData(); LoadData();
} }
LoadData();
} }
catch (Exception ex) catch (Exception ex)
{ {