/
DataTimeModule
/
DateTime
Обзор
Документация
Войти
/
DataTimeModule
/
DateTime
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
SQLDataDriver/ProductForm.cs
136 строк
5 KB
Reeltell
upload
27 май 2026, 01:50
27 май 2026, 01:50
f282598
Код
Авторство
О чём код?
namespace SQLDataDriver { public partial class ProductForm : Form { private readonly string role; public ProductForm(string fullName, string role) { InitializeComponent(); UiStyle.Apply(this); this.role = role; userLabel.Text = $"{role}: {fullName}"; } private bool CanManageProducts => role == "Администратор"; private bool CanFilterProducts => role == "Администратор" || role == "Менеджер"; private void ProductForm_Load(object sender, EventArgs e) { searchTextBox.Visible = CanFilterProducts; providerComboBox.Visible = CanFilterProducts; sortComboBox.Visible = CanFilterProducts; addButton.Visible = CanManageProducts; ordersButton.Visible = CanFilterProducts; sortComboBox.Items.AddRange(new[] { "Без сортировки", "Остаток ↑", "Остаток ↓" }); sortComboBox.SelectedIndex = 0; LoadProviders(); LoadProducts(); } private void LoadProviders() { Db.Combo( providerComboBox, "SELECT 0 Sort, N'' Id, N'Все поставщики' Title UNION ALL SELECT 1, Title, Title FROM Providers ORDER BY Sort, Title", "Title", "Id"); } private void LoadProducts() { productsPanel.Controls.Clear(); string sql = """ SELECT p.Article, p.Title, c.Title AS Category, p.Description, m.Title AS Manufacturer, pr.Title AS Provider, p.Price, p.Discount, p.StockQuantity, u.Title AS Unit, p.PhotoPath FROM Products p JOIN ProductCategories c ON p.ProductCategoryId = c.ProductCategoryId JOIN Manufacturers m ON p.ManufacturerId = m.ManufacturerId JOIN Providers pr ON p.ProviderId = pr.ProviderId JOIN Units u ON p.UnitId = u.UnitId WHERE (@provider = N'' OR pr.Title = @provider) AND (p.Title LIKE @like OR p.Description LIKE @like OR c.Title LIKE @like OR m.Title LIKE @like OR pr.Title LIKE @like OR u.Title LIKE @like) ORDER BY CASE WHEN @sort = 1 THEN p.StockQuantity END, CASE WHEN @sort = 2 THEN p.StockQuantity END DESC, p.Title """; string provider = providerComboBox.SelectedIndex > 0 ? providerComboBox.SelectedValue?.ToString() ?? "" : ""; string search = searchTextBox.Text.Trim(); int sort = sortComboBox.SelectedIndex; Db.Read(sql, r => { var card = new ProductCard(); card.SetProduct( Db.S(r, "Article"), Db.GetImage(Db.S(r, "PhotoPath")), Db.S(r, "Title"), Db.S(r, "Category"), Db.S(r, "Description"), Db.S(r, "Manufacturer"), Db.S(r, "Provider"), Db.D(r, "Price"), Db.I(r, "Discount"), Db.I(r, "StockQuantity"), Db.S(r, "Unit"), CanManageProducts); card.EditProduct += OpenEditForm; card.DeleteProduct += DeleteProduct; productsPanel.Controls.Add(card); }, ("@provider", provider), ("@like", $"%{search}%"), ("@sort", sort)); } private void filter_Changed(object sender, EventArgs e) { if (CanFilterProducts && sortComboBox.SelectedIndex >= 0 && providerComboBox.SelectedIndex >= 0) { LoadProducts(); } } private void addButton_Click(object sender, EventArgs e) { OpenEditForm(""); } private void ordersButton_Click(object sender, EventArgs e) { new OrdersForm(CanManageProducts).ShowDialog(); } private void OpenEditForm(string article) { new ProductEditForm(article).ShowDialog(); LoadProducts(); } private void DeleteProduct(string article) { if (!Db.Confirm("Удалить товар?")) return; try { Db.Exec("DELETE FROM Products WHERE Article = @article", ("@article", article)); LoadProducts(); } catch { Db.Error("Нельзя удалить товар, который есть в заказе."); } } private void exitButton_Click(object sender, EventArgs e) { Close(); } } }