187 lines
6.0 KiB
C#
187 lines
6.0 KiB
C#
using Contracts.BindingModels;
|
||
using Contracts.SearchModels;
|
||
using Contracts.StorageContracts;
|
||
using DocumentFormat.OpenXml.Vml;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel;
|
||
using System.Data;
|
||
using System.Drawing;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Text.RegularExpressions;
|
||
using System.Threading.Tasks;
|
||
using System.Windows.Forms;
|
||
using WinForm;
|
||
|
||
namespace AppView
|
||
{
|
||
public partial class FormProvider : Form
|
||
{
|
||
private int? _id;
|
||
public int Id { set { _id = value; } }
|
||
public readonly IProviderStorage _providerStorage;
|
||
public readonly ITypeStorage _typeStorage;
|
||
private bool isEdited;
|
||
private byte[] _logo = new byte[0];
|
||
|
||
public FormProvider(IProviderStorage providerStorage, ITypeStorage typeStorage)
|
||
{
|
||
_providerStorage = providerStorage;
|
||
_typeStorage = typeStorage;
|
||
isEdited = false;
|
||
|
||
InitializeComponent();
|
||
}
|
||
|
||
private Image byteArrayToImage(byte[] byteArrayIn)
|
||
{
|
||
Image res = null;
|
||
try
|
||
{
|
||
MemoryStream ms = new MemoryStream(byteArrayIn, 0, byteArrayIn.Length);
|
||
ms.Write(byteArrayIn, 0, byteArrayIn.Length);
|
||
res = Image.FromStream(ms, true);//Exception occurs here
|
||
}
|
||
catch { }
|
||
return res;
|
||
}
|
||
|
||
private void FormProvider_Load(object sender, EventArgs e)
|
||
{
|
||
dropDownList1.ExplicitEvent += OnInputChange;
|
||
LoadData();
|
||
if (_id.HasValue)
|
||
{
|
||
try
|
||
{
|
||
var element = _providerStorage.GetElement(new ProviderSearchModel { Id = _id!.Value });
|
||
if (element != null)
|
||
{
|
||
textBoxName.Text = element.Name;
|
||
_logo = element.Logo;
|
||
dropDownList1.Selected = element.Type;
|
||
textBoxNumber.Text = element.Number;
|
||
|
||
pictureBox1.Image = byteArrayToImage(_logo);
|
||
}
|
||
}
|
||
catch(Exception ex)
|
||
{
|
||
MessageBox.Show(ex.Message, "Ошибка при получении записи", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
}
|
||
}
|
||
}
|
||
|
||
private void LoadData()
|
||
{
|
||
var list = _typeStorage.GetFullList().Select(item => item.Name).ToList();
|
||
dropDownList1.Clear();
|
||
foreach (var item in list)
|
||
{
|
||
dropDownList1.ComboBoxItems.Add(item);
|
||
}
|
||
|
||
if (_id != null)
|
||
{
|
||
var provider = _providerStorage.GetElement(new ProviderSearchModel() { Id = _id!.Value });
|
||
dropDownList1.Selected = provider!.Type;
|
||
}
|
||
}
|
||
|
||
private void buttonSave_Click(object sender, EventArgs e)
|
||
{
|
||
if (string.IsNullOrEmpty(textBoxName.Text))
|
||
{
|
||
MessageBox.Show("Название не указано.");
|
||
return;
|
||
}
|
||
if (_logo.Length == 0)
|
||
{
|
||
MessageBox.Show("Выберите фото", "Ошибка");
|
||
return;
|
||
}
|
||
if (string.IsNullOrEmpty(dropDownList1.Selected))
|
||
{
|
||
MessageBox.Show("Не выбран тип изделий.");
|
||
return;
|
||
}
|
||
if (!Regex.IsMatch(textBoxNumber.Text, @"^\d-\d{3}-\d{3}-\d{2}-\d{2}$"))
|
||
{
|
||
MessageBox.Show("Неправильный формат номера телефона.");
|
||
return;
|
||
}
|
||
|
||
isEdited = false;
|
||
|
||
try
|
||
{
|
||
var model = new ProviderBindingModel
|
||
{
|
||
Id = _id ?? 0,
|
||
Name = textBoxName.Text,
|
||
Logo = _logo,
|
||
Type = dropDownList1.Selected,
|
||
Number = textBoxNumber.Text
|
||
};
|
||
var action = _id.HasValue ? _providerStorage.Update(model) : _providerStorage.Insert(model);
|
||
DialogResult = DialogResult.OK;
|
||
Close();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
}
|
||
}
|
||
|
||
private void buttonCancel_Click(object sender, EventArgs e)
|
||
{
|
||
Close();
|
||
}
|
||
|
||
private void buttonType_Click(object sender, EventArgs e)
|
||
{
|
||
var service = Program.ServiceProvider?.GetService(typeof(FormType));
|
||
if (service is FormType form)
|
||
{
|
||
form.ShowDialog();
|
||
LoadData();
|
||
}
|
||
}
|
||
|
||
private void FormProvider_FormClosing(object sender, FormClosingEventArgs e)
|
||
{
|
||
if (!isEdited) return;
|
||
|
||
var confirmResult = MessageBox.Show(
|
||
"Имеются незафиксированные изменения." +
|
||
"\n" +
|
||
"Вы действительно хотите закрыть форму?",
|
||
"Подтвердите действие",
|
||
MessageBoxButtons.YesNo,
|
||
MessageBoxIcon.Question
|
||
);
|
||
if (confirmResult == DialogResult.No) e.Cancel = true;
|
||
}
|
||
|
||
private void buttonImage_Click(object sender, EventArgs e)
|
||
{
|
||
if (ImgFile.ShowDialog() != DialogResult.OK) return;
|
||
|
||
Image img = Image.FromFile(ImgFile.FileName);
|
||
using (MemoryStream mStream = new MemoryStream())
|
||
{
|
||
img.Save(mStream, img.RawFormat);
|
||
_logo = mStream.ToArray();
|
||
}
|
||
|
||
pictureBox1.Image = img;
|
||
}
|
||
|
||
private void OnInputChange(object sender, EventArgs e)
|
||
{
|
||
isEdited = true;
|
||
}
|
||
}
|
||
}
|