166 lines
5.3 KiB
C#
166 lines
5.3 KiB
C#
using SushiBarBusinessLogic;
|
||
using SushiBarContracts.BindingModels;
|
||
using SushiBarContracts.SearchModels;
|
||
using SushiBarContracts.ViewModels;
|
||
|
||
namespace SushiBarView.Forms
|
||
{
|
||
public partial class FormCreateCheque : Form
|
||
{
|
||
private readonly ChequeLogic _chequeLogic;
|
||
private readonly CustomerLogic _customerLogic;
|
||
|
||
private List<ChequeItemViewModel> ChequeItems;
|
||
|
||
private int? _id;
|
||
public int Id { set { _id = value; } }
|
||
|
||
public FormCreateCheque(ChequeLogic ChequeLogic, CustomerLogic customerLogic)
|
||
{
|
||
InitializeComponent();
|
||
|
||
_chequeLogic = ChequeLogic;
|
||
_customerLogic = customerLogic;
|
||
|
||
ChequeItems = new();
|
||
}
|
||
|
||
private void FormCreateCheque_Load(object sender, EventArgs e)
|
||
{
|
||
var List = _customerLogic.ReadList(null);
|
||
if (List != null)
|
||
{
|
||
CustomerComboBox.DisplayMember = "Fio";
|
||
CustomerComboBox.ValueMember = "Id";
|
||
CustomerComboBox.DataSource = List;
|
||
CustomerComboBox.SelectedItem = null;
|
||
}
|
||
|
||
if (_id.HasValue)
|
||
{
|
||
try
|
||
{
|
||
var View = _chequeLogic.ReadElement(new ChequeSearchModel
|
||
{
|
||
Id = _id.Value
|
||
});
|
||
|
||
if (View != null)
|
||
{
|
||
CustomerComboBox.SelectedItem = View.CustomerId;
|
||
ChequeItems = View.ChequeItems.Select(x => x.Value).ToList();
|
||
|
||
CustomerComboBox.Enabled = false;
|
||
AddButton.Enabled = false;
|
||
SaveButton.Enabled = false;
|
||
|
||
LoadData();
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
}
|
||
}
|
||
}
|
||
|
||
private void LoadData()
|
||
{
|
||
try
|
||
{
|
||
DataGridView.Rows.Clear();
|
||
foreach (var ChequeItem in ChequeItems)
|
||
{
|
||
DataGridView.Rows.Add(new object[] { ChequeItem.DishId, ChequeItem.DishName, ChequeItem.Count, ChequeItem.CookFio });
|
||
}
|
||
|
||
PriceTextBox.Text = CalcPrice().ToString();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
}
|
||
}
|
||
|
||
private void AddButton_Click(object sender, EventArgs e)
|
||
{
|
||
var Form = new FormCreateChequeItem(
|
||
new DishLogic(new SushiBarDatabaseImplement.Storages.DishStorage()),
|
||
new CookLogic(new SushiBarDatabaseImplement.Storages.CookStorage()));
|
||
|
||
if (Form.ShowDialog() == DialogResult.OK)
|
||
{
|
||
if (Form.DishModel == null || Form.CookModel == null)
|
||
{
|
||
return;
|
||
}
|
||
|
||
ChequeItems.Add(new ChequeItemViewModel
|
||
{
|
||
DishId = Form.DishId,
|
||
DishName = Form.DishModel.DishName,
|
||
DishPrice = Form.DishModel.Price,
|
||
CookId = Form.CookId,
|
||
CookFio = Form.CookModel.Fio,
|
||
Count = Form.Count,
|
||
});
|
||
LoadData();
|
||
}
|
||
}
|
||
|
||
private void SaveButton_Click(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
var Мodel = new ChequeBindingModel
|
||
{
|
||
Id = 0,
|
||
ChequeItems = ChequeItems.Select(x => new ChequeItemBindingModel
|
||
{
|
||
DishId = x.DishId,
|
||
CookId = x.CookId,
|
||
Count = x.Count,
|
||
}).ToList(),
|
||
CustomerId = null,
|
||
OrderDate = DateTime.Now,
|
||
TotalSum = CalcPrice(),
|
||
PromotionId = null,
|
||
};
|
||
|
||
var OperationResult = _chequeLogic.CreateCheque(Мodel);
|
||
|
||
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 double CalcPrice()
|
||
{
|
||
double Price = 0;
|
||
|
||
foreach (var Elem in ChequeItems)
|
||
{
|
||
Price += Elem.DishPrice * Elem.Count;
|
||
}
|
||
|
||
return Math.Round(Price * 1.1, 2);
|
||
}
|
||
}
|
||
}
|