using BusinessLogic; using DataContracts.bindingModels; using DataContracts.searchModels; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace ClientForms { public partial class Client : Form { private readonly ClientBL clientBL = new ClientBL(); private readonly ProductBL productBL = new ProductBL(); private int? _id; private bool fioFlag = false; private bool emailFlag = false; private bool photoFlag = false; private bool EditfioFlag = false; private bool EditemailFlag = false; private bool EditphotoFlag = false; private bool close = false; private byte[] image; private List oldProducts = new List(); public int? Id { get { return _id; } set { _id = value; } } public Client() { InitializeComponent(); myEmailTextBox.ValueChanged += EmailTextBox_TextChanged; myEmailTextBox.Pattern = "^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$"; } private void Client_Load(object sender, EventArgs e) { LoadData(); if (Id.HasValue) { var current_client = clientBL.ReadElement(new ClientSearchModel { Id = Id }); if(current_client != null) { textBoxFIO.Text = current_client.FIO; myEmailTextBox.TextBoxValue = current_client.email; image = current_client.photo; oldProducts = current_client.products.Split(',').ToList(); buttonPhoto.BackColor = Color.DarkOliveGreen; myCheckListProducts.setValues(current_client.products.Split(',').ToList()); EditfioFlag = false; EditemailFlag = false; EditphotoFlag = false; fioFlag = true; emailFlag = true; photoFlag = true; } } } private bool checkProducts() { if(oldProducts.Count != myCheckListProducts.getSelectedItems().Count) return true; foreach(var oldProd in oldProducts) { if(!myCheckListProducts.getSelectedItems().Contains(oldProd)) return true; } return false; } private void LoadData() { myCheckListProducts.LoadValues(productBL.ReadList().Select(x => x.title).ToList()); } private void textBoxFIO_TextChanged(object sender, EventArgs e) { EditfioFlag = true; if (textBoxFIO.Text.Length != 0) { fioFlag = true; textBoxFIO.BackColor = Color.DarkOliveGreen; } else { fioFlag = false; textBoxFIO.BackColor = Color.IndianRed; } } private void EmailTextBox_TextChanged(object sender, EventArgs e) { EditemailFlag = true; if (myEmailTextBox.TextBoxValue != null) { emailFlag = true; myEmailTextBox.BackColor = Color.DarkOliveGreen; } else { emailFlag = false; myEmailTextBox.BackColor = Color.IndianRed; } } private void buttonPhoto_Click(object sender, EventArgs e) { EditphotoFlag = true; if (openFileDialogPath.ShowDialog() == DialogResult.Cancel) return; string filename = openFileDialogPath.FileName; Image img = Image.FromFile(filename); byte[] bA; using (MemoryStream mStream = new MemoryStream()) { img.Save(mStream, img.RawFormat); bA = mStream.ToArray(); } image = bA; photoFlag = true; buttonPhoto.BackColor = Color.DarkOliveGreen; } private void buttonSave_Click(object sender, EventArgs e) { if(fioFlag & emailFlag & photoFlag & myCheckListProducts.selectedValuesCount != 0) { if(!Id.HasValue) clientBL.Create(new ClientBindingModel { FIO = textBoxFIO.Text, email = myEmailTextBox.TextBoxValue, photo = image, products = string.Join(",", myCheckListProducts.getSelectedItems().ToArray()) }); else clientBL.Update(new ClientBindingModel { Id = (int)Id, FIO = textBoxFIO.Text, email = myEmailTextBox.TextBoxValue, photo = image, products = string.Join(",", myCheckListProducts.getSelectedItems()) }); close = true; this.Close(); } else { MessageBox.Show("Не заполнены поля"); } } private void Client_FormClosing(object sender, FormClosingEventArgs e) { if (close) { e.Cancel = false; return; } if ((EditfioFlag || EditemailFlag || EditphotoFlag || checkProducts())) { DialogResult dialogResult = MessageBox.Show("Вы забыли сохранить изменения! Желаете выйти?", "Важно", MessageBoxButtons.YesNo); if (dialogResult == DialogResult.Yes) e.Cancel = false; else e.Cancel = true; } } } }