/// /// 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 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() .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 remoteUsers = session.QueryOver().List(); IList remoteGroups = session.QueryOver().List(); /// /// Delete all local users /// DB.DbType = GlobalData.LocalUsersDB.DbType; DB.ConnectionString = GlobalData.LocalUsersDB.ConnectionString; session = DB.CreateSession(); IList users = session.QueryOver().List(); foreach (var user in users) DB.DeleteObject(session, user); IList groups = session.QueryOver().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 newUsers = session.QueryOver().List(); IList newGroups = session.QueryOver().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) { MessageBox.Show(Strings.Copying_remote_users_failed, Strings.Confirmation, MessageBoxButtons.OK, MessageBoxIcon.Information); } } } }