//Редагування рецепту public void receptChange() { using (var context = new ReceptContext()) { var recept = context.Recepts.Where(r => r.id == receptId).FirstOrDefault(); if (recept != null) { recept.Name = receptNameBox.Text; recept.Description = receptDescBox.Text; recept.ReceptTypeId = ((ReceptType)receptTypesBox.SelectedItem).id; recept.Moderation = false; context.Ingredients.RemoveRange(recept.Ingredients); var ingrds = GetIngredients(recept.id); if (ingrds.Count != 0) { context.Ingredients.AddRange(ingrds); context.SaveChanges(); MessageBox.Show("Рецепт відправленно на модерацію"); Close(); } } } }
private void refreshUserList() { using (var context = new ReceptContext()) { List <ReceptDb.Recept> recepts; if (user.isAdmin) { recepts = context.Recepts .Where(r => r.Moderation == false) .ToList(); } else { recepts = context.Recepts .Where(r => r.UserId == user.id && r.Moderation == true) .ToList(); } userReceptsListBox.DataSource = recepts; userReceptsListBox.ValueMember = "Id"; userReceptsListBox.DisplayMember = "Name"; } }
//Будування інтерфейу відповідно до користувача private void LoadIntefaceFor() { //Перевірка чи являється користувач адміном if (user.isAdmin) { receptAddBtn.Visible = false; receptDeleteBtn.Visible = false; receptChangeBtn.Visible = false; openModerationBtn.Visible = true; using (var context = new ReceptContext()) { var recepts = context.Recepts.AsNoTracking().Where(r => r.Moderation == false).ToList(); userReceptsListBox.DataSource = recepts; userReceptsListBox.ValueMember = "Id"; userReceptsListBox.DisplayMember = "Name"; } } else { userReceptsListBox.DataSource = user.Recepts; userReceptsListBox.ValueMember = "Id"; userReceptsListBox.DisplayMember = "Name"; } }
//Видалення рецепту private void receptDeleteBtn_Click(object sender, EventArgs e) { if (userReceptsListBox.SelectedItems.Count > 0) { var id = (ReceptDb.Recept)userReceptsListBox.SelectedItem; using (var context = new ReceptContext()) { var res = MessageBox.Show("Ви точно хочете видалити?", "Видалити", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (res == DialogResult.No) { return; } var recept = context.Recepts.Where(r => r.id == id.id).FirstOrDefault(); context.Recepts.Remove(recept); context.SaveChanges(); } refreshUserBtn_Click(this, EventArgs.Empty); } }
private void enterBtn_Click(object sender, EventArgs e) { enterBtn.Enabled = false; registrationBtn.Enabled = false; using (var context = new ReceptContext()) { var login = loginTextBox.Text.Trim(); var password = passwordTextBox.Text.Trim(); if (string.IsNullOrWhiteSpace(login) || string.IsNullOrWhiteSpace(password)) { MessageBox.Show("Заповніть всі поля"); } else { var user = context.Users.Where(u => u.Login == login && u.Password == password).FirstOrDefault(); if (user != null) { MainForm mainForm = new MainForm(user); mainForm.Show(); Hide(); } else { MessageBox.Show("Введені невірні дані входу"); } } } registrationBtn.Enabled = true; enterBtn.Enabled = true; }
/// <summary> /// Ініціалізація форм /// </summary> /// <param name="s">Кнопка яка викликала відкриття форми</param> /// <param name="user">Користувач</param> /// <param name="recept">Рецепт для якого відкривається форма</param> public Recept(object s, User user, ReceptDb.Recept recept, MainForm main) { InitializeComponent(); printDocument = new PrintDocument(); printDialog = new PrintDialog(); printDocument.PrintPage += PrintDocument_PrintPage; mainForm = main; currentRecept = recept; if (user.isAdmin) { receptPrintBtn.Visible = false; if (((s is Button) && ((Button)s).Name == "openModerationBtn") || ((s is ListBox) && ((ListBox)s).Name == "userReceptsListBox")) { rejectBtn.Text = "Відхилити"; confirmBtn.Visible = true; } rejectBtn.Visible = true; } receptNameLabel.Text = recept.Name; receptTypeLabel.Text = recept.ReceptType.Name; descriptionBox.Text = recept.Description; receptAurhorLabel.Text = recept.User.Login; using (var context = new ReceptContext()) { var rec = recept.Ingredients.Join( context.Units, r => r.UnitId, u => u.id, (r, u) => new { Name = r.Name, Count = r.Count, Unit = u.Name }); ingredientsData.Columns.Add("Name", "Назва"); ingredientsData.Columns.Add("Count", "Кількість"); ingredientsData.Columns.Add("Unit", "Мірна одиниця"); foreach (var ingr in rec.ToList()) { ingredientsData.Rows.Add(ingr.Name, ingr.Count, ingr.Unit); } } }
//Конструкто редагування рецепту public ReceptAdd(User user, int receptId) { InitializeComponent(); Text = "Редагування рецепту"; this.receptId = receptId; currentUser = user; using (var context = new ReceptContext()) { var recept = context.Recepts.Where(r => r.id == receptId).FirstOrDefault(); if (recept != null) { receptNameBox.Text = recept.Name; receptDescBox.Text = recept.Description; receptTypesBox.DataSource = context.ReceptTypes.ToList(); receptTypesBox.ValueMember = "id"; receptTypesBox.DisplayMember = "Name"; receptTypesBox.SelectedItem = recept.ReceptType; var ingrds = recept.Ingredients.Join( context.Units, i => i.UnitId, u => u.id, (i, u) => new { Name = i.Name, Count = i.Count, Unit = u.id }).ToList(); foreach (var i in ingrds) { ingredientsData.Rows.Add(i.Name, i.Count); ingrUnit.DataSource = context.Units.ToList(); ingrUnit.ValueMember = "id"; ingrUnit.DisplayMember = "Name"; int currRow = ingredientsData.Rows.Count - 1; ingredientsData.Rows[currRow].Cells["ingrUnit"].Value = i.Unit; } } } }
//Додавання нового рядка для інгредієнту private void addIngredient_Click(object sender, EventArgs e) { ingredientsData.Rows.Add(); using (var context = new ReceptContext()) { ingrUnit.DataSource = context.Units.ToList(); ingrUnit.ValueMember = "id"; ingrUnit.DisplayMember = "Name"; } }
//Створення нового рецепту private void receptCreate() { using (var context = new ReceptContext()) { var type = (ReceptType)receptTypesBox.SelectedItem; if (string.IsNullOrWhiteSpace(receptNameBox.Text)) { MessageBox.Show("Вкажіть назву"); return; } if (string.IsNullOrWhiteSpace(receptDescBox.Text)) { MessageBox.Show("Вкажіть рецепт"); return; } var recept = new ReceptDb.Recept() { Name = receptNameBox.Text.Trim(), Description = receptDescBox.Text.Trim(), UserId = currentUser.id, ReceptTypeId = type.id }; context.Recepts.Add(recept); var ingrds = GetIngredients(recept.id); if (ingrds.Count != 0) { if (CheckProhibitedIngredient(recept, ingrds) == false) { context.Ingredients.AddRange(ingrds); context.SaveChanges(); MessageBox.Show("Рецепт відправленно на модерацію"); Close(); } else { MessageBox.Show("Ваш рецепт містить заборонені інгредієнти"); } } else { MessageBox.Show("Додайде інгредієнти"); } } }
//Відкриття форми для відображення рецепту private void ShowRecept(int id, object sender) { using (var contex = new ReceptContext()) { var recept = contex.Recepts.Where(r => r.id == id).FirstOrDefault(); if (recept != null) { Recept receptForm = new Recept(sender, user, recept, this); receptForm.Show(); } } }
//Конструктор Додавання рецепту public ReceptAdd(User user) { InitializeComponent(); Text = "Додати рецепт"; currentUser = user; receptId = 0; using (var context = new ReceptContext()) { receptTypesBox.DataSource = context.ReceptTypes.ToList(); receptTypesBox.ValueMember = "id"; receptTypesBox.DisplayMember = "Name"; } }
/// <summary> /// Отримання інгредієнтів рецепту /// </summary> /// <param name="receptId">Іденитфікатор рецпту</param> /// <returns>Список інгредієнтів рецепту</returns> private List <Ingredient> GetIngredients(int receptId) { List <Ingredient> ingredientList = new List <Ingredient>(); using (var context = new ReceptContext()) { for (int i = 0; i < ingredientsData.Rows.Count; i++) { string name; if (ingredientsData.Rows[i].Cells["ingrName"].Value != null) { name = ingredientsData.Rows[i].Cells["ingrName"].Value.ToString(); } else { MessageBox.Show("Вказано пустий інгредієнт, заповнійть його або видаліть"); return(new List <Ingredient>()); } if (!float.TryParse(ingredientsData.Rows[i].Cells["ingrCount"].Value.ToString(), out float count)) { MessageBox.Show("Вказано невірну кількість"); return(new List <Ingredient>()); } Unit unit = new Unit(); if (ingredientsData.Rows[i].Cells["ingrUnit"].Value != null) { int.TryParse(ingredientsData.Rows[i].Cells["ingrUnit"].Value.ToString(), out int uId); unit = context.Units.Where(u => u.id == uId).FirstOrDefault(); } else { MessageBox.Show("Вкажіть одиницю виміру"); return(new List <Ingredient>()); } ingredientList.Add(new Ingredient() { Name = name, Count = count, ReceptId = receptId, UnitId = unit.id }); } } return(ingredientList); }
//Друк рецепту private void PrintDocument_PrintPage(object sender, PrintPageEventArgs e) { using (var context = new ReceptContext()) { var recept = context.Recepts.Where(r => r.id == currentRecept.id).FirstOrDefault(); string print = recept.Name + "\n\nІнгредієнти\n\n"; foreach (var ingr in recept.Ingredients.ToList()) { print += $"{ingr.Name} - {ingr.Count} {ingr.Unit.Name}\n"; } print += "\nРецепт\n\n" + recept.Description; e.Graphics.DrawString(print, new Font("Arial", 14), Brushes.Black, e.MarginBounds, StringFormat.GenericTypographic); } }
private void regBtn_Click(object sender, EventArgs e) { enterBtn.Enabled = false; regBtn.Enabled = false; using (var context = new ReceptContext()) { var login = loginTextBox.Text.Trim(); var password = passTextBox.Text.Trim(); if (String.IsNullOrWhiteSpace(login) || String.IsNullOrWhiteSpace(password)) { MessageBox.Show("Заповніть всі поля"); } else { var user = context.Users.AsNoTracking().Where(u => u.Login == login).FirstOrDefault(); if (user == null) { context.Users.Add(new User() { Login = login, Password = password }); context.SaveChanges(); MessageBox.Show("Користувача зареєстровано"); EnterForm enterForm = new EnterForm(); enterForm.Show(); Close(); } else { MessageBox.Show("Користувач з даним логіном зареєстрований"); } } } enterBtn.Enabled = true; regBtn.Enabled = true; }
//Підтвердження додававння рецепту private void confirmBtn_Click(object sender, System.EventArgs e) { using (var context = new ReceptContext()) { var result = MessageBox.Show("Підтвердити?", "Додавання", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.No) { return; } var recept = context.Recepts.Where(r => r.id == currentRecept.id).FirstOrDefault(); recept.Moderation = true; context.SaveChanges(); } mainForm.refreshList(); Close(); }
private void ChangeType() { if (receptTypesBox.Items.Count > 0) { using (var context = new ReceptContext()) { var type = (ReceptType)receptTypesBox.SelectedItem; List <ReceptDb.Recept> recepts; if (type.id != 0) { recepts = context.Recepts.AsNoTracking().Where(r => r.ReceptTypeId == type.id && r.Moderation == true).ToList(); } else { recepts = context.Recepts.AsNoTracking().Where(r => r.Moderation == true).ToList(); } receptsListBox.DataSource = recepts; receptsListBox.ValueMember = "Id"; receptsListBox.DisplayMember = "Name"; } } }
//Пошук private void findBtn_Click(object sender, EventArgs e) { if (!string.IsNullOrWhiteSpace(findTextBox.Text)) { var findedRecept = findTextBox.Text; var type = (ReceptType)receptTypesBox.SelectedItem; using (var context = new ReceptContext()) { List <ReceptDb.Recept> recepts; if (type.id != 0) { recepts = context.Recepts.AsNoTracking() .Where(r => r.ReceptTypeId == type.id && r.Name.Contains(findedRecept)) .ToList(); } else { recepts = context.Recepts.AsNoTracking() .Where(r => r.Name.Contains(findedRecept)) .ToList(); } if (recepts.Count > 0) { receptsListBox.DataSource = recepts; receptsListBox.ValueMember = "Id"; receptsListBox.DisplayMember = "Name"; } else { MessageBox.Show("Нічого не знайдено"); } } } }
//Загрузка форми public MainForm(User user) { InitializeComponent(); this.user = user; //Обработчики событий для двойного клика по ListBox receptsListBox.DoubleClick += OpenDouble_Click; userReceptsListBox.DoubleClick += OpenDouble_Click; userReceptsListBox.SelectionMode = SelectionMode.One; receptsListBox.SelectionMode = SelectionMode.One; LoadIntefaceFor(); userNameLabel.Text = user.Login; using (var context = new ReceptContext()) { var types = context.ReceptTypes.AsNoTracking().ToList(); var recepts = context.Recepts.AsNoTracking().Where(r => r.Moderation == true).ToList(); types.Add(new ReceptType() { Name = "Всі", id = 0 }); receptTypesBox.DataSource = types; receptTypesBox.ValueMember = "id"; receptTypesBox.DisplayMember = "Name"; receptTypesBox.SelectedItem = types.Last(); receptsListBox.DataSource = recepts; receptsListBox.ValueMember = "Id"; receptsListBox.DisplayMember = "Name"; } }
/// <summary> /// Перевірка на заборонені інгредієнти /// </summary> /// <param name="recept">Рецепт</param> /// <param name="ingredientList">Список інгредієнтів</param> /// <returns>True якщо не знайдено, False - знайдено</returns> private bool CheckProhibitedIngredient(ReceptDb.Recept recept, List <Ingredient> ingredientList) { using (var context = new ReceptContext()) { var desc = recept.Description.ToLower().Split(' '); foreach (var prohibitedIngrd in context.ProhibitedIngredients.ToList()) { if (desc.Contains(prohibitedIngrd.Name)) { return(true); } foreach (var ingr in ingredientList) { if (ingr.Name.ToLower() == prohibitedIngrd.Name.ToLower()) { return(true); } } } } return(false); }