222 lines
8.4 KiB
C#
222 lines
8.4 KiB
C#
|
using BeautySaloonContracts.BindingModels;
|
|||
|
using BeautySaloonContracts.BusinessLogicsContracts;
|
|||
|
using BeautySaloonContracts.SearchModels;
|
|||
|
using BeautySaloonDataModels;
|
|||
|
|
|||
|
namespace BeautySaloonView
|
|||
|
{
|
|||
|
public partial class FormCreateOrder : Form
|
|||
|
{
|
|||
|
private readonly IOrderLogic _logicO;
|
|||
|
private readonly IEmployeeLogic _logicE;
|
|||
|
private int? _idClient;
|
|||
|
private int? _id;
|
|||
|
private Dictionary<int, (TimeOnly, IServiceModel, int)> _orderServices;
|
|||
|
public int IdClient { set { _idClient = value; } }
|
|||
|
public int Id { set { _id = value; } }
|
|||
|
public FormCreateOrder(IOrderLogic logic, IEmployeeLogic logicE)
|
|||
|
{
|
|||
|
InitializeComponent();
|
|||
|
_logicO = logic;
|
|||
|
_logicE = logicE;
|
|||
|
_orderServices = new();
|
|||
|
}
|
|||
|
private void FormCreateOrder_Load(object sender, EventArgs e)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
// продавцы
|
|||
|
var list = _logicE.ReadList(new EmployeeSearchModel
|
|||
|
{
|
|||
|
Id = 1
|
|||
|
});
|
|||
|
if (list != null)
|
|||
|
{
|
|||
|
comboBoxEmployee.DisplayMember = "FIO";
|
|||
|
comboBoxEmployee.ValueMember = "Id";
|
|||
|
comboBoxEmployee.DataSource = list;
|
|||
|
comboBoxEmployee.SelectedItem = null;
|
|||
|
}
|
|||
|
// загружаем заказ для изменения
|
|||
|
if (_id.HasValue)
|
|||
|
{
|
|||
|
var view = _logicO.ReadElement(new OrderSearchModel
|
|||
|
{
|
|||
|
Id = _idClient.Value
|
|||
|
});
|
|||
|
if (view != null)
|
|||
|
{
|
|||
|
textBox.Text = view.Sum.ToString();
|
|||
|
dateTimePicker.Text = view.Date.ToString();
|
|||
|
comboBoxEmployee.SelectedValue = view.EmployeeId;
|
|||
|
_orderServices = view.OrderServices ?? new();
|
|||
|
LoadData();
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
MessageBox.Show(ex.Message, "Ошибка загрузки", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|||
|
}
|
|||
|
}
|
|||
|
private void LoadData()
|
|||
|
{
|
|||
|
// заполняем datagridview
|
|||
|
try
|
|||
|
{
|
|||
|
if (_orderServices != null)
|
|||
|
{
|
|||
|
dataGridView.Rows.Clear();
|
|||
|
foreach (var os in _orderServices)
|
|||
|
{
|
|||
|
var empl = _logicE.ReadElement(new EmployeeSearchModel
|
|||
|
{
|
|||
|
Id = os.Value.Item3
|
|||
|
});
|
|||
|
if (empl == null)
|
|||
|
{
|
|||
|
throw new ArgumentNullException("Не найден указанный сотрудник");
|
|||
|
}
|
|||
|
dataGridView.Rows.Add(new object[]
|
|||
|
{
|
|||
|
os.Key,
|
|||
|
os.Value.Item2.Name,
|
|||
|
os.Value.Item1,
|
|||
|
empl.FIO,
|
|||
|
});
|
|||
|
}
|
|||
|
textBox.Text = CalcPrice().ToString();
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|||
|
}
|
|||
|
}
|
|||
|
private void ButtonAdd_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
var service = Program.ServiceProvider?.GetService(typeof(FormOrderServices));
|
|||
|
if (service is FormOrderServices form)
|
|||
|
{
|
|||
|
if (form.ShowDialog() == DialogResult.OK)
|
|||
|
{
|
|||
|
if (form.ServiceModel == null)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
if (_orderServices.ContainsKey(form.IdService))
|
|||
|
{
|
|||
|
_orderServices[form.IdService] = (form.Date,
|
|||
|
form.ServiceModel, form.IdEmployee);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
_orderServices.Add(form.IdService,
|
|||
|
(form.Date, form.ServiceModel, form.IdEmployee));
|
|||
|
}
|
|||
|
LoadData();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
private void ButtonUpd_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
if (dataGridView.SelectedRows.Count == 1)
|
|||
|
{
|
|||
|
var service = Program.ServiceProvider?.GetService(typeof(FormOrderServices));
|
|||
|
if (service is FormOrderServices form)
|
|||
|
{
|
|||
|
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value);
|
|||
|
form.IdService = id;
|
|||
|
form.Date = _orderServices[id].Item1;
|
|||
|
form.IdEmployee = _orderServices[id].Item3;
|
|||
|
if (form.ShowDialog() == DialogResult.OK)
|
|||
|
{
|
|||
|
if (form.ServiceModel == null)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
_orderServices[form.IdService] = (form.Date,
|
|||
|
form.ServiceModel, form.IdEmployee);
|
|||
|
LoadData();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
private void ButtonDel_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
if (dataGridView.SelectedRows.Count == 1)
|
|||
|
{
|
|||
|
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
_orderServices?.Remove(Convert.ToInt32(dataGridView
|
|||
|
.SelectedRows[0].Cells[0].Value));
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|||
|
}
|
|||
|
LoadData();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
private void ButtonRef_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
LoadData();
|
|||
|
}
|
|||
|
private void ButtonSave_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
if (comboBoxEmployee.SelectedValue == null)
|
|||
|
{
|
|||
|
MessageBox.Show("Выберите продавца", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|||
|
return;
|
|||
|
}
|
|||
|
if (_orderServices == null || _orderServices.Count == 0)
|
|||
|
{
|
|||
|
MessageBox.Show("Заполните услуги", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|||
|
return;
|
|||
|
}
|
|||
|
try
|
|||
|
{
|
|||
|
var model = new OrderBindingModel
|
|||
|
{
|
|||
|
Id = _id ?? 0,
|
|||
|
Date = DateOnly.FromDateTime(dateTimePicker.Value),
|
|||
|
Sum = Convert.ToDecimal(textBox.Text),
|
|||
|
ClientId = _idClient.Value,
|
|||
|
EmployeeId = Convert.ToInt32(comboBoxEmployee.SelectedValue),
|
|||
|
OrderServices = _orderServices
|
|||
|
};
|
|||
|
var operationResult = _id.HasValue ? _logicO.Update(model) : _logicO.CreateOrder(model);
|
|||
|
if (!operationResult)
|
|||
|
{
|
|||
|
throw new Exception("Ошибка при сохранении.");
|
|||
|
}
|
|||
|
MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|||
|
DialogResult = DialogResult.OK;
|
|||
|
Close();
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|||
|
}
|
|||
|
}
|
|||
|
private void ButtonCancel_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
DialogResult = DialogResult.Cancel;
|
|||
|
Close();
|
|||
|
}
|
|||
|
private decimal CalcPrice()
|
|||
|
{
|
|||
|
decimal price = 0;
|
|||
|
foreach (var elem in _orderServices)
|
|||
|
{
|
|||
|
price += elem.Value.Item2?.Price ?? 0;
|
|||
|
}
|
|||
|
return Math.Round(price, 2);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|