| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- using System;
- using System.Data;
- using System.Linq;
- using System.Windows.Forms;
- using RestaurantApp.DAL;
- using RestaurantApp.Models;
- namespace RestaurantApp
- {
- public partial class OrderForm : Form
- {
- private OrderRepository repo = new OrderRepository();
- private OrderRepository dishRepo = new OrderRepository();
- private ClientRepository clientRepo = new ClientRepository();
- private EmployeeRepository empRepo = new EmployeeRepository();
- private Order currentOrder = null;
- public OrderForm()
- {
- InitializeComponent();
- LoadOrders();
- LoadDishes();
- cmbStatusFilter.SelectedIndex = 0;
- btnNewOrder.Click += BtnNewOrder_Click;
- btnRefreshOrders.Click += (s, e) => LoadOrders();
- btnOrderSearch.Click += (s, e) => LoadOrders();
- btnAddDish.Click += BtnAddDish_Click;
- btnAddItem.Click += (s, e) => groupAddItem.Visible = !groupAddItem.Visible;
- btnEditItem.Click += BtnEditItem_Click;
- btnRemoveItem.Click += BtnRemoveItem_Click;
- btnPay.Click += BtnPay_Click;
- btnCloseOrder.Click += BtnCloseOrder_Click;
- dgvOrders.SelectionChanged += DgvOrders_SelectionChanged;
- groupAddItem.Visible = false;
- }
- private void LoadOrders()
- {
- string status = cmbStatusFilter.SelectedIndex > 0 ? cmbStatusFilter.Text : "";
- // Если выбран "Все" - передаём пустую строку
- string statusParam = (status == "Все" || string.IsNullOrEmpty(status)) ? "" : status;
- dgvOrders.DataSource = repo.GetAll(statusParam, txtOrderSearch.Text);
- if (dgvOrders.Columns.Count > 0)
- {
- dgvOrders.Columns["OrderId"].HeaderText = "ID";
- dgvOrders.Columns["TableInfo"].HeaderText = "Стол";
- dgvOrders.Columns["EmployeeName"].HeaderText = "Официант";
- dgvOrders.Columns["ClientName"].HeaderText = "Клиент";
- dgvOrders.Columns["OpenedAt"].HeaderText = "Открыт";
- dgvOrders.Columns["ClosedAt"].HeaderText = "Закрыт";
- dgvOrders.Columns["Status"].HeaderText = "Статус";
- dgvOrders.Columns["TotalAmount"].HeaderText = "Сумма";
- if (dgvOrders.Columns["TableId"] != null)
- dgvOrders.Columns["TableId"].Visible = false;
- if (dgvOrders.Columns["EmployeeId"] != null)
- dgvOrders.Columns["EmployeeId"].Visible = false;
- if (dgvOrders.Columns["ClientId"] != null)
- dgvOrders.Columns["ClientId"].Visible = false;
- if (dgvOrders.Columns["DiscountPct"] != null)
- dgvOrders.Columns["DiscountPct"].Visible = false;
- }
- }
- private void LoadDishes()
- {
- var dishRepo = new DishRepository();
- var dishes = dishRepo.GetAll("", 0, true);
- cmbDish.DisplayMember = "Name";
- cmbDish.ValueMember = "DishId";
- cmbDish.DataSource = dishes;
- }
- private void LoadOrderItems(int orderId)
- {
- dgvOrderItems.DataSource = repo.GetItems(orderId);
- if (dgvOrderItems.Columns.Count > 0)
- {
- dgvOrderItems.Columns["DishName"].HeaderText = "Блюдо";
- dgvOrderItems.Columns["Quantity"].HeaderText = "Кол-во";
- dgvOrderItems.Columns["UnitPrice"].HeaderText = "Цена";
- dgvOrderItems.Columns["Total"].HeaderText = "Сумма";
- dgvOrderItems.Columns["Status"].HeaderText = "Статус";
- dgvOrderItems.Columns["Notes"].HeaderText = "Примечание";
- }
- // Обновляем общую сумму
- var order = repo.GetAll("", "").FirstOrDefault(o => o.OrderId == orderId);
- if (order != null)
- lblTotal.Text = $"Сумма: {order.TotalAmount} ₽";
- }
- private void UpdateOrderInfo()
- {
- if (currentOrder != null)
- {
- lblTable.Text = $"Стол: {currentOrder.TableInfo}";
- lblWaiter.Text = $"Официант: {currentOrder.EmployeeName}";
- lblOpenedAt.Text = $"Открыт: {currentOrder.OpenedAt:dd.MM.yyyy HH:mm}";
- lblClient.Text = $"Клиент: {(string.IsNullOrEmpty(currentOrder.ClientName) ? "Без клиента" : currentOrder.ClientName)}";
- lblStatus.Text = $"Статус: {currentOrder.Status}";
- lblTotal.Text = $"Сумма: {currentOrder.TotalAmount} ₽";
- bool isActive = currentOrder.Status != "closed" && currentOrder.Status != "cancelled";
- btnAddItem.Enabled = isActive;
- btnAddDish.Enabled = isActive;
- btnEditItem.Enabled = isActive;
- btnRemoveItem.Enabled = isActive;
- btnPay.Enabled = isActive && currentOrder.TotalAmount > 0;
- btnCloseOrder.Enabled = isActive;
- }
- }
- private void DgvOrders_SelectionChanged(object sender, EventArgs e)
- {
- if (dgvOrders.CurrentRow != null)
- {
- currentOrder = (Order)dgvOrders.CurrentRow.DataBoundItem;
- UpdateOrderInfo();
- LoadOrderItems(currentOrder.OrderId);
- }
- }
- private void BtnNewOrder_Click(object sender, EventArgs e)
- {
- var form = new OrderEditForm();
- if (form.ShowDialog() == DialogResult.OK)
- {
- LoadOrders();
- // Выбираем созданный заказ (последний)
- if (dgvOrders.Rows.Count > 0)
- {
- dgvOrders.ClearSelection();
- dgvOrders.Rows[dgvOrders.Rows.Count - 1].Selected = true;
- }
- }
- }
- private void BtnAddDish_Click(object sender, EventArgs e)
- {
- if (currentOrder == null)
- {
- MessageBox.Show("Выберите заказ");
- return;
- }
- if (cmbDish.SelectedItem == null)
- {
- MessageBox.Show("Выберите блюдо");
- return;
- }
- var dish = (Dish)cmbDish.SelectedItem;
- var item = new OrderItem
- {
- OrderId = currentOrder.OrderId,
- DishId = dish.DishId,
- Quantity = (int)numQuantity.Value,
- UnitPrice = dish.Price,
- Notes = txtItemNotes.Text
- };
- try
- {
- repo.AddItem(item);
- LoadOrderItems(currentOrder.OrderId);
- LoadOrders(); // обновляем сумму в списке заказов
- txtItemNotes.Text = "";
- numQuantity.Value = 1;
- MessageBox.Show("Блюдо добавлено");
- }
- catch (Exception ex)
- {
- MessageBox.Show($"Ошибка: {ex.Message}");
- }
- }
- private void BtnEditItem_Click(object sender, EventArgs e)
- {
- if (dgvOrderItems.CurrentRow == null)
- {
- MessageBox.Show("Выберите позицию");
- return;
- }
- var item = (OrderItem)dgvOrderItems.CurrentRow.DataBoundItem;
- var form = new OrderItemEditForm(item);
- if (form.ShowDialog() == DialogResult.OK)
- {
- LoadOrderItems(currentOrder.OrderId);
- LoadOrders();
- }
- }
- private void BtnRemoveItem_Click(object sender, EventArgs e)
- {
- if (dgvOrderItems.CurrentRow == null)
- {
- MessageBox.Show("Выберите позицию");
- return;
- }
- var item = (OrderItem)dgvOrderItems.CurrentRow.DataBoundItem;
- if (MessageBox.Show($"Удалить {item.DishName}?", "Подтверждение",
- MessageBoxButtons.YesNo) == DialogResult.Yes)
- {
- repo.DeleteItem(item.OrderItemId);
- LoadOrderItems(currentOrder.OrderId);
- LoadOrders();
- }
- }
- private void BtnPay_Click(object sender, EventArgs e)
- {
- if (currentOrder == null) return;
- var form = new PaymentForm(currentOrder.OrderId, currentOrder.TotalAmount);
- if (form.ShowDialog() == DialogResult.OK)
- {
- LoadOrders();
- LoadOrderItems(currentOrder.OrderId);
- UpdateOrderInfo();
- MessageBox.Show("Оплата произведена");
- }
- }
- private void BtnCloseOrder_Click(object sender, EventArgs e)
- {
- if (currentOrder == null) return;
- if (MessageBox.Show($"Закрыть заказ #{currentOrder.OrderId}?", "Подтверждение",
- MessageBoxButtons.YesNo) == DialogResult.Yes)
- {
- repo.UpdateOrderStatus(currentOrder.OrderId, "closed");
- LoadOrders();
- LoadOrderItems(currentOrder.OrderId);
- UpdateOrderInfo();
- }
- }
- }
- }
|