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; using Diplom_O.DataBase; namespace Diplom_O { public partial class SettingsForm : Form { private readonly ColumnConf[] tableUserColumns = { new ColumnConf(name: "Логин", size: 140) }; private readonly ColumnConf[] tableAccessColumns = { new ColumnConf(name: "Форма", size: 140), new ColumnConf(name: "Просм.", size: 80), new ColumnConf(name: "Удал.", size: 80), new ColumnConf(name: "Изм.", size: 80), new ColumnConf(name: "Доб.", size: 80) }; private readonly ColumnConf[] tableTypeStajColumns = { new ColumnConf(name: "Название", size: 140) }; private void resetTypeStajTable() { try { var res = new List(); var subres = FuncDB.TypeStajListString(); foreach (var a in subres) res.Add(new string[] { a }); this.ResetTable( typeStajGridView, tableTypeStajColumns, res.ToArray() ); } catch (Exception e) { this.ShowError(errorLabel, e.Message); } } private TypeStaj selectedTypeStajTable() { try { if (typeStajGridView.SelectedRows.Count != 1) return null; return FuncDB.TypeStajGetByName((string)typeStajGridView.SelectedRows[0].Cells[0].Value); } catch (Exception e) { this.ShowError(errorLabel, e.Message); return null; } } private void typeStajGridView_SelectionChanged(object sender, EventArgs e) { var type_staj = selectedTypeStajTable(); textBox1.Text = type_staj == null ? "" : type_staj.Name; } private void resetUserTable() { try { this.ResetTable( userGridView, tableUserColumns, FuncDB.UserListTable(true) ); } catch (Exception e) { this.ShowError(errorLabel, e.Message); } } private User selectedUserTable() { try { if (userGridView.SelectedRows.Count != 1) return null; return FuncDB.UserGetByLogin((string)userGridView.SelectedRows[0].Cells[0].Value); } catch (Exception e) { this.ShowError(errorLabel, e.Message); return null; } } private void userGridView_SelectionChanged(object sender, EventArgs e) { resetAccessTable(); } private void initAccessTable() { try { accessGridView.Rows.Clear(); accessGridView.Columns.Clear(); var c = accessGridView.Columns; for (var i = 0; i < tableAccessColumns.Length; i++) { if (i != 0) c.Add(new DataGridViewCheckBoxColumn() { FalseValue = false, TrueValue = true, HeaderText = tableAccessColumns[i].name }); else c.Add(tableAccessColumns[i].name, tableAccessColumns[i].name); c[i].Width = tableAccessColumns[i].size; if (tableAccessColumns[i].warp) c[i].DefaultCellStyle.WrapMode = DataGridViewTriState.True; } foreach (var formName in FormArray.formName) { accessGridView.Rows.Add(); var row = accessGridView.Rows[accessGridView.Rows.Count - 1]; row.Cells[0].Value = formName; for (var i = 0; i < FormArray.formAccess.Length; i++) ((DataGridViewCheckBoxCell)row.Cells[i + 1]).Value = false; } } catch (Exception ex) { this.ShowError(errorLabel, ex.Message); } } private void accessGridView_CellClick(object sender, DataGridViewCellEventArgs e) { try { if (accessGridView.SelectedCells.Count != 1) return; var cell = accessGridView.SelectedCells[0]; var accessId = cell.ColumnIndex; if (accessId == 0) return; else accessId--; var formId = cell.RowIndex; ((DataGridViewCheckBoxCell)accessGridView.SelectedCells[0]).Value = !(bool)((DataGridViewCheckBoxCell)accessGridView.SelectedCells[0]).Value; var user = selectedUserTable(); if (user == null) throw new Exception("Пользователь не выбран."); var access = FuncDB.AccessGetByUserIdFormIdAccessId(user.Id, formId, accessId); if ( (access == null && !(bool)cell.Value) || (access != null && (bool)cell.Value) ) return; if ((bool)cell.Value) { if (FuncDB.AccessGetByUserIdFormIdAccessId(user.Id, formId, 0) == null) FuncDB.AccessAdd(new Access() { UserId = user.Id, FormId = formId, FormatAccess = 0 }); FuncDB.AccessAdd(new Access() { UserId = user.Id, FormId = formId, FormatAccess = accessId }); } else { if (formId == 7 && FuncDB.AccessToSettingsFullCountWithoutUserId(user) == 0) throw new Exception("Должен хотя бы 1 польз. иметь полн. дост. к настр."); if (formId == user.Default && accessId == 0) throw new Exception("Нельзя снять разрешение для окна по умолчанию."); if (accessId == 0) { var list = FuncDB.AccessGetByUserIdFormId(user.Id, formId); foreach (var l in list) FuncDB.AccessDelete(l); } else { FuncDB.AccessDelete(access); } } resetAccessTable(); } catch (Exception ex) { this.ShowError(errorLabel, ex.Message); resetAccessTable(); } } private void resetAccessTable() { try { var user = selectedUserTable(); var res = new bool[FormArray.formName.Length, FormArray.formAccess.Length]; if (user != null) res = FuncDB.AccessListTable(user.Id); for (var i = 0; i < FormArray.formName.Length; i++) for (var j = 0; j < FormArray.formAccess.Length; j++) ((DataGridViewCheckBoxCell)accessGridView.Rows[i].Cells[j + 1]).Value = res[i, j]; } catch (Exception e) { this.ShowError(errorLabel, e.Message); } } public SettingsForm() { InitializeComponent(); this.correctUpperMenu(menuStrip, 7); initAccessTable(); resetTypeStajTable(); resetUserTable(); addUserButton.Enabled = changeUserButton.Enabled = delUserButton.Enabled = accessGridView.Enabled = button2.Enabled = button1.Enabled = button3.Enabled = false; var user = this.GetUser(); if (user == null) return; accessGridView.Enabled = FuncDB.AccessGetByUserIdFormIdAccessId(user.Id, 7, 2) != null || FuncDB.AccessGetByUserIdFormIdAccessId(user.Id, 7, 3) != null; delUserButton.Enabled = button1.Enabled = FuncDB.AccessGetByUserIdFormIdAccessId(user.Id, 7, 1) != null; changeUserButton.Enabled = button3.Enabled = FuncDB.AccessGetByUserIdFormIdAccessId(user.Id, 7, 2) != null; addUserButton.Enabled = button2.Enabled = FuncDB.AccessGetByUserIdFormIdAccessId(user.Id, 7, 3) != null; } private void addTypeStajButton_Click(object sender, EventArgs e) { try { var type = new TypeStaj() { Name = textBox1.Text }; FuncDB.TypeStajAdd(type); resetTypeStajTable(); } catch (Exception ex) { this.ShowError(errorLabel, ex.Message); } } private void changeTypeStajButton_Click(object sender, EventArgs e) { try { var type = selectedTypeStajTable(); if (type == null) throw new Exception("Не вбран тип стажа."); type.Name = textBox1.Text; FuncDB.TypeStajChange(type); resetTypeStajTable(); } catch (Exception ex) { this.ShowError(errorLabel, ex.Message); } } private void delTypeButton_Click(object sender, EventArgs e) { try { var type = selectedTypeStajTable(); if (type == null) throw new Exception("Не вбран тип стажа."); FuncDB.TypeStajDelete(type); resetTypeStajTable(); } catch (Exception ex) { this.ShowError(errorLabel, ex.Message); } } private void addUserButton_Click(object sender, EventArgs e) { try { var form = new SupportForms.LoginForm(); form.ShowDialog(); if (!form.isCanceled) resetUserTable(); } catch (Exception ex) { this.ShowError(errorLabel, ex.Message); } } private void changeUserButton_Click(object sender, EventArgs e) { try { if (selectedUserTable() == null) throw new Exception("Не выбран пользователь."); var form = new SupportForms.LoginForm(selectedUserTable()); form.ShowDialog(); if (!form.isCanceled) resetUserTable(); } catch (Exception ex) { this.ShowError(errorLabel, ex.Message); } } private void delUserButton_Click(object sender, EventArgs e) { try { var user = selectedUserTable(); if (user == null) throw new Exception("Не выбран пользователь."); if (FuncDB.AccessToSettingsFullCountWithoutUserId(user) == 0) throw new Exception("Должен хотя бы 1 польз. иметь полн. дост. к настр."); FuncDB.UserDelete(selectedUserTable()); resetUserTable(); } catch (Exception ex) { this.ShowError(errorLabel, ex.Message); } } private void upperMenuClicked(object sender, ToolStripItemClickedEventArgs e) { this.upperMenuClicked((MenuStrip)sender); if (this.GetNextForm() != -1) Close(); } } }