using Microsoft.VisualBasic.FileIO; using ProjectFamilyBudget.Entities; using ProjectFamilyBudget.Entities.Enums; using ProjectFamilyBudget.Repositories; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace ProjectFamilyBudget.Forms { public partial class FormIncome : Form { private readonly IIncome _income; private int? _incomeId; public int Id { set { try { var income = _income.ReadIncomeById(value); if (income == null) { throw new InvalidDataException(nameof(income)); } foreach (IncomeExpenseType elem in Enum.GetValues(typeof(IncomeExpenseType))) { if ((elem & income.IncomeType) != 0) { checkedListBoxType.SetItemChecked(checkedListBoxType.Items.IndexOf( elem), true); } } textBoxName.Text = income.Name; textBoxCategory.Text = income.IncomeCategory; _incomeId = value; } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка при получени данных", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } } public FormIncome(IIncome income) { InitializeComponent(); _income = income ?? throw new ArgumentNullException(nameof(income)); foreach (var elem in Enum.GetValues(typeof(IncomeExpenseType))) { checkedListBoxType.Items.Add(elem); } } private void buttonSave_Click(object sender, EventArgs e) { try { if (string.IsNullOrWhiteSpace(textBoxName.Text) || string.IsNullOrWhiteSpace(textBoxCategory.Text) || checkedListBoxType.CheckedItems.Count == 0) { throw new Exception("Имеются незаполненные поля"); } if (_incomeId.HasValue) { _income.UpdateIncome(CreateIncome(_incomeId.Value)); } else { _income.CreateIncome(CreateIncome(0)); } Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void buttonCansel_Click(object sender, EventArgs e) => Close(); private Income CreateIncome(int id) { IncomeExpenseType incomeType = IncomeExpenseType.None; foreach (var elem in checkedListBoxType.CheckedItems) { incomeType |= (IncomeExpenseType)elem; } return Income.CreateEntity(id, incomeType, textBoxName.Text, textBoxCategory.Text); } } }