365 lines
9.1 KiB
C#
365 lines
9.1 KiB
C#
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<string[]>();
|
||
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();
|
||
}
|
||
|
||
|
||
}
|
||
}
|