tbf/Users/Forms/UserManagementDlg.cs

207 lines
6.9 KiB
C#

///
/// Copyright (c) 2017 Sensus Metering Systems
///
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using NHibernate;
using Users.Entities;
using Users.Resources;
namespace Users.Forms
{
public partial class UserManagementDlg: Form
{
public string TitleExtension;
NHibernate.ISession session;
bool showExtensions;
IList<User> ListOfUsers;
int LastSelectedIndex;
public UserManagementDlg(bool showLocalExtensions)
{
InitializeComponent();
this.showExtensions = showLocalExtensions;
if (showLocalExtensions) copyFromRemoteButton.Visible = true;
}
private void EditUsers_Load(object sender, EventArgs e)
{
Text = string.Format(string.IsNullOrEmpty(TitleExtension) ? "{0}" : "{0} : {1}", Strings.User_Management, TitleExtension);
addButton.Text = Strings.AddBtnText;
editButton.Text = Strings.EditBtnText;
deleteButton.Text = Strings.RemoveBtnText;
closeButton.Text = Strings.CloseBtnText;
listViewUsers.Columns.Add(Strings.User_name, 120);
listViewUsers.Columns.Add(Strings.User_code, 80);
listViewUsers.Columns.Add(Strings.Full_name, 250);
}
private void EditUsers_Activated(object sender, EventArgs e)
{
Cursor.Current = Cursors.WaitCursor;
session = Users.DB.CreateSession();
ListUsers();
RefreshButtonStates();
}
public void ListUsers()
{
Cursor.Current = Cursors.WaitCursor;
ListOfUsers = session.QueryOver<User>()
.List();
listViewUsers.Items.Clear();
foreach (var person in ListOfUsers)
{
ListViewItem item = new ListViewItem(person.UserName);
item.SubItems.Add(person.Number.ToString());
item.SubItems.Add(person.FullName);
item.Tag = person;
this.listViewUsers.Items.Add(item);
}
this.listViewUsers.Refresh();
Cursor.Current = Cursors.Default;
}
private void closeButton_Click(object sender, EventArgs e)
{
this.Close();
}
private void RefreshButtonStates()
{
editButton.Enabled = (listViewUsers.SelectedItems.Count > 0);
deleteButton.Enabled = (listViewUsers.SelectedItems.Count > 0);
}
private void listViewUsers_SelectedIndexChanged(object sender, EventArgs e)
{
RefreshButtonStates();
if (listViewUsers.SelectedItems.Count > 0)
{
LastSelectedIndex = listViewUsers.SelectedItems[0].Index;
}
else
{
LastSelectedIndex = -1;
}
}
private void editButton_Click(object sender, EventArgs e)
{
Forms.EditSelectedUser dlg = new Forms.EditSelectedUser();
dlg.CurrentEditUser = (User)listViewUsers.SelectedItems[0].Tag;
dlg.Session = session;
dlg.ShowDialog();
ListUsers();
}
private void listViewUsers_DoubleClick(object sender, EventArgs e)
{
editButton_Click (sender, e);
}
private void addButton_Click(object sender, EventArgs e)
{
Forms.EditSelectedUser dlg;
dlg = new Forms.EditSelectedUser();
dlg.Session = session;
dlg.CurrentEditUser = new User();
dlg.ShowDialog();
ListUsers();
}
private void deleteButton_Click(object sender, EventArgs e)
{
Object Selecteduser = listViewUsers.SelectedItems[0].Tag;
Users.DB.DeleteObject(session, Selecteduser);
ListUsers();
}
private void copyFromRemoteButton_Click(object sender, EventArgs e)
{
if (GlobalData.RemoteUsersDB == null || string.IsNullOrEmpty(GlobalData.RemoteUsersDB.ConnectionString) ||
GlobalData.LocalUsersDB == null || string.IsNullOrEmpty(GlobalData.LocalUsersDB.ConnectionString))
{
MessageBox.Show(Strings.No_remote_database_of_users,
Strings.Error,
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
return;
}
if (MessageBox.Show(Strings.Are_you_sure,
Strings.Warning,
MessageBoxButtons.YesNo,
MessageBoxIcon.Exclamation) != DialogResult.Yes)
{
return;
}
try
{
///
/// Read remote users
///
DB.DbType = GlobalData.RemoteUsersDB.DbType;
DB.ConnectionString = GlobalData.RemoteUsersDB.ConnectionString;
ISession session = DB.CreateSession();
IList<User> remoteUsers = session.QueryOver<User>().List();
IList<Group> remoteGroups = session.QueryOver<Group>().List();
///
/// Delete all local users
///
DB.DbType = GlobalData.LocalUsersDB.DbType;
DB.ConnectionString = GlobalData.LocalUsersDB.ConnectionString;
session = DB.CreateSession();
IList<User> users = session.QueryOver<User>().List();
foreach (var user in users) DB.DeleteObject(session, user);
IList<Group> groups = session.QueryOver<Group>().List();
foreach (var group in groups) DB.DeleteObject(session, group);
session.Flush();
///
/// Save all remote users to the local DB
///
DB.DbType = GlobalData.LocalUsersDB.DbType;
DB.ConnectionString = GlobalData.LocalUsersDB.ConnectionString;
session = DB.CreateSession();
IList<User> newUsers = session.QueryOver<User>().List();
IList<Group> newGroups = session.QueryOver<Group>().List();
foreach (var user in remoteUsers)
{
User newUser = (User)user.Clone();
newUsers.Add(newUser);
foreach (var group in user.Groups)
{
Group newGroup = new Group(group.Gid, group.Name);
newUser.AddGroup(newGroup);
}
DB.SaveObject(session, newUser);
}
session.Flush();
MessageBox.Show(string.Format(Strings.N_users_copied, remoteUsers.Count),
Strings.Confirmation,
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
catch (Exception exc)
{
MessageBox.Show(Strings.Copying_remote_users_failed,
Strings.Confirmation,
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
}
}