202 lines
8.5 KiB
C#
202 lines
8.5 KiB
C#
using MySql.Data.MySqlClient;
|
|
using System;
|
|
using System.Data;
|
|
using System.Windows.Forms;
|
|
using System.Windows.Forms.VisualStyles;
|
|
|
|
namespace WindowsFormsApp2
|
|
{
|
|
public partial class OrderEditForm : Form
|
|
{
|
|
string connectionString;
|
|
int? orderId;
|
|
|
|
public OrderEditForm(string connStr, int? id)
|
|
{
|
|
connectionString = connStr;
|
|
orderId = id;
|
|
InitializeComponent();
|
|
LoadUsers();
|
|
LoadStatuses();
|
|
LoadProducts();
|
|
if (orderId.HasValue)
|
|
{
|
|
LoadOrderData();
|
|
}
|
|
buttonSave.Click += ButtonSave_Click;
|
|
buttonAddItem.Click += ButtonAddItem_Click;
|
|
buttonRemoveItem.Click += ButtonRemoveItem_Click;
|
|
}
|
|
|
|
void LoadUsers()
|
|
{
|
|
using (MySqlConnection conn = new MySqlConnection(connectionString))
|
|
{
|
|
conn.Open();
|
|
MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT id, full_name FROM users", conn);
|
|
DataTable dt = new DataTable();
|
|
adapter.Fill(dt);
|
|
comboBoxUser.DisplayMember = "full_name";
|
|
comboBoxUser.ValueMember = "id";
|
|
comboBoxUser.DataSource = dt;
|
|
}
|
|
}
|
|
|
|
void LoadStatuses()
|
|
{
|
|
using (MySqlConnection conn = new MySqlConnection(connectionString))
|
|
{
|
|
conn.Open();
|
|
MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT idstatus, name FROM status", conn);
|
|
DataTable dt = new DataTable();
|
|
adapter.Fill(dt);
|
|
comboBoxStatus.DisplayMember = "name";
|
|
comboBoxStatus.ValueMember = "idstatus";
|
|
comboBoxStatus.DataSource = dt;
|
|
}
|
|
}
|
|
|
|
void LoadProducts()
|
|
{
|
|
using (MySqlConnection conn = new MySqlConnection(connectionString))
|
|
{
|
|
conn.Open();
|
|
MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT id, name, sku FROM products", conn);
|
|
DataTable dt = new DataTable();
|
|
adapter.Fill(dt);
|
|
comboBoxProduct.DisplayMember = "name";
|
|
comboBoxProduct.ValueMember = "id";
|
|
comboBoxProduct.DataSource = dt;
|
|
}
|
|
}
|
|
|
|
void LoadOrderData()
|
|
{
|
|
using (MySqlConnection conn = new MySqlConnection(connectionString))
|
|
{
|
|
conn.Open();
|
|
string query = "SELECT order_number, user_id, status, pickup_address, order_date, delivery_date FROM orders WHERE id = @id";
|
|
MySqlCommand cmd = new MySqlCommand(query, conn);
|
|
cmd.Parameters.AddWithValue("@id", orderId.Value);
|
|
MySqlDataReader reader = cmd.ExecuteReader();
|
|
if (reader.Read())
|
|
{
|
|
textBoxOrderNumber.Text = reader["order_number"].ToString();
|
|
comboBoxUser.SelectedValue = reader["user_id"];
|
|
comboBoxStatus.SelectedValue = reader["status"];
|
|
textBoxAddress.Text = reader["pickup_address"].ToString();
|
|
dateTimePickerOrder.Value = Convert.ToDateTime(reader["order_date"]);
|
|
|
|
if (reader["delivery_date"] != DBNull.Value)
|
|
{
|
|
dateTimePickerDelivery.Value = Convert.ToDateTime(reader["delivery_date"]);
|
|
dateTimePickerDelivery.Checked = true;
|
|
}
|
|
else
|
|
{
|
|
dateTimePickerDelivery.Checked = false;
|
|
}
|
|
}
|
|
reader.Close();
|
|
|
|
string itemsQuery = "SELECT p.id as product_id, p.name as product_name, oi.quantity FROM order_items oi JOIN products p ON oi.product_id = p.id WHERE oi.order_id = @id";
|
|
MySqlCommand itemsCmd = new MySqlCommand(itemsQuery, conn);
|
|
itemsCmd.Parameters.AddWithValue("@id", orderId.Value);
|
|
MySqlDataAdapter adapter = new MySqlDataAdapter(itemsCmd);
|
|
DataTable dt = new DataTable();
|
|
adapter.Fill(dt);
|
|
dataGridViewItems.DataSource = dt;
|
|
}
|
|
}
|
|
|
|
void ButtonSave_Click(object sender, EventArgs e)
|
|
{
|
|
using (MySqlConnection conn = new MySqlConnection(connectionString))
|
|
{
|
|
conn.Open();
|
|
if (orderId.HasValue)
|
|
{
|
|
string query = "UPDATE orders SET order_number = @num, user_id = @uid, status = @sid, pickup_address = @addr, order_date = @odate, delivery_date = @ddate WHERE id = @id";
|
|
MySqlCommand cmd = new MySqlCommand(query, conn);
|
|
cmd.Parameters.AddWithValue("@num", textBoxOrderNumber.Text);
|
|
cmd.Parameters.AddWithValue("@uid", comboBoxUser.SelectedValue);
|
|
cmd.Parameters.AddWithValue("@sid", comboBoxStatus.SelectedValue);
|
|
cmd.Parameters.AddWithValue("@addr", textBoxAddress.Text);
|
|
cmd.Parameters.AddWithValue("@odate", dateTimePickerOrder.Value.Date);
|
|
cmd.Parameters.AddWithValue("@ddate", dateTimePickerDelivery.ValueOrNull());
|
|
cmd.Parameters.AddWithValue("@id", orderId.Value);
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
else
|
|
{
|
|
string query = "INSERT INTO orders (order_number, user_id, status, pickup_address, order_date, delivery_date) VALUES (@num, @uid, @sid, @addr, @odate, @ddate)";
|
|
MySqlCommand cmd = new MySqlCommand(query, conn);
|
|
cmd.Parameters.AddWithValue("@num", textBoxOrderNumber.Text);
|
|
cmd.Parameters.AddWithValue("@uid", comboBoxUser.SelectedValue);
|
|
cmd.Parameters.AddWithValue("@sid", comboBoxStatus.SelectedValue);
|
|
cmd.Parameters.AddWithValue("@addr", textBoxAddress.Text);
|
|
cmd.Parameters.AddWithValue("@odate", dateTimePickerOrder.Value.Date);
|
|
cmd.Parameters.AddWithValue("@ddate", dateTimePickerDelivery.ValueOrNull());
|
|
cmd.ExecuteNonQuery();
|
|
orderId = (int)cmd.LastInsertedId;
|
|
}
|
|
SaveOrderItems();
|
|
}
|
|
this.DialogResult = DialogResult.OK;
|
|
this.Close();
|
|
}
|
|
|
|
void SaveOrderItems()
|
|
{
|
|
using (MySqlConnection conn = new MySqlConnection(connectionString))
|
|
{
|
|
conn.Open();
|
|
MySqlCommand deleteCmd = new MySqlCommand("DELETE FROM order_items WHERE order_id = @id", conn);
|
|
deleteCmd.Parameters.AddWithValue("@id", orderId.Value);
|
|
deleteCmd.ExecuteNonQuery();
|
|
|
|
foreach (DataGridViewRow row in dataGridViewItems.Rows)
|
|
{
|
|
if (row.IsNewRow) continue;
|
|
|
|
if (row.Cells[0].Value != null && row.Cells[0].Value != DBNull.Value)
|
|
{
|
|
string query = "INSERT INTO order_items (order_id, product_id, quantity) VALUES (@oid, @pid, @qty)";
|
|
MySqlCommand cmd = new MySqlCommand(query, conn);
|
|
cmd.Parameters.AddWithValue("@oid", orderId.Value);
|
|
cmd.Parameters.AddWithValue("@pid", row.Cells[0].Value);
|
|
cmd.Parameters.AddWithValue("@qty", row.Cells[2].Value);
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void ButtonAddItem_Click(object sender, EventArgs e)
|
|
{
|
|
if (comboBoxProduct.SelectedValue != null && numericUpDownQty.Value > 0)
|
|
{
|
|
int productId = Convert.ToInt32(comboBoxProduct.SelectedValue);
|
|
string productName = comboBoxProduct.Text;
|
|
int qty = (int)numericUpDownQty.Value;
|
|
dataGridViewItems.Rows.Add(productId, productName, qty);
|
|
}
|
|
}
|
|
|
|
void ButtonRemoveItem_Click(object sender, EventArgs e)
|
|
{
|
|
if (dataGridViewItems.SelectedRows.Count > 0)
|
|
{
|
|
dataGridViewItems.Rows.RemoveAt(dataGridViewItems.SelectedRows[0].Index);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static class DateTimeExtensions
|
|
{
|
|
public static object ValueOrNull(this DateTimePicker picker)
|
|
{
|
|
return picker.Checked ? (object)picker.Value.Date : DBNull.Value;
|
|
}
|
|
}
|
|
} |