174 lines
6.0 KiB
C#
Raw Normal View History

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<string> oldProducts = new List<string>();
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;
}
}
}
}