/// /// Copyright (c) 2017-2018 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; using System.Windows.Forms; using NHibernate; using Users.Entities; using Users.Resources; namespace Users.Forms { public enum MySortOrder { None, Ascending, /// Th esame like SortOrder.Ascending Descending, /// The same like SortOrder.Descending Ascending2, /// Sorts by a surname in ascending order in case or 'Name Surname' column Descending2, /// Sorts by a surname in descending order in case or 'Name Surname' column } public partial class UserManagementDlg: Form { const int UserNumberColumn = 1; const int NameSurnameColumn = 2; public string TitleExtension; NHibernate.ISession session; bool showExtensions; IList listOfUsers; int lastSelectedIndex; MySortOrder sortOrder = MySortOrder.Ascending; int sortColumn = -1; /// 0-based index of column to be used for sorting public UserManagementDlg(NHibernate.ISession session, bool showLocalExtensions) { InitializeComponent(); this.session = session; this.showExtensions = showLocalExtensions; if (showLocalExtensions) copyFromRemoteButton.Visible = true; } private void UserManagementDlg_Load(object sender, EventArgs e) { /// Program version string Version ver = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; string version = string.Format("{0}.{1}.{2}", ver.Major, ver.Minor, ver.Build); Text = string.Format(string.IsNullOrEmpty(TitleExtension) ? "{0} ver.{1}" : "{0} ver.{1} : {2}", Strings.User_Management, version, TitleExtension); addButton.Text = Strings.AddBtnText; editButton.Text = Strings.EditBtnText; deleteButton.Text = Strings.RemoveBtnText; closeButton.Text = Strings.CloseBtnText; listViewUsers.Columns.Add(Strings.User_name, 100); /// column 0 listViewUsers.Columns.Add(Strings.User_code, 70); /// column 1: UserNumberColumn listViewUsers.Columns.Add(Strings.Full_name, 150); /// column 2: NameSurnameColumn #if TURA_IPERL || TURA_IPERL_NEW || TURA_SPECIAL listViewUsers.Columns.Add(Strings.Tag, 110); #endif listViewUsers.Columns.Add(Strings.Groups, 370); try { listOfUsers = session.QueryOver().List(); } catch (Exception exc) { string msg = exc.Message; } ListUsers(); } public void ListUsers() { Cursor.Current = Cursors.WaitCursor; listViewUsers.Items.Clear(); foreach (User u in listOfUsers) { string grps = string.Empty; /// #if TURA_IPERL || TURA_IPERL_NEW foreach (var gid in new Grp.GID[] { Grp.GID.TraceabilityManagement, Grp.GID.Administrators, Grp.GID.HeadOfLab, Grp.GID.Metrologists, Grp.GID.CalibrationSpecialists, Grp.GID.TestingSpecialists, Grp.GID.MaintenanceSpecialists, Grp.GID.Testers }) #else foreach (var gid in new Grp.GID[] { Grp.GID.Administrators, Grp.GID.HeadOfLab, Grp.GID.Metrologists, Grp.GID.CalibrationSpecialists, Grp.GID.TestingSpecialists, Grp.GID.MaintenanceSpecialists, Grp.GID.Testers }) #endif { if (u.IsMemberOf(gid)) { if (!string.IsNullOrEmpty(grps)) grps += ", "; grps += Grp.Gid2Str(gid); } } ListViewItem item = new ListViewItem(u.UserName); item.SubItems.Add(u.Number.ToString()); item.SubItems.Add(u.FullName); #if TURA_IPERL || TURA_IPERL_NEW || TURA_SPECIAL item.SubItems.Add(string.IsNullOrEmpty(u.Tag) ? string.Empty : u.Tag); #endif item.SubItems.Add(grps); item.Tag = u; 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 listViewUsers_ColumnClick(object sender, ColumnClickEventArgs e) { if (e.Column == sortColumn) { /// Clicked on the same column header => increment to the next applicable MySortOrder if (e.Column == NameSurnameColumn) { sortOrder++; if (sortOrder > MySortOrder.Descending2) sortOrder = MySortOrder.Ascending; } else { sortOrder = (sortOrder == MySortOrder.Ascending) ? MySortOrder.Descending : MySortOrder.Ascending; } } else { /// Clicked on another column header => set sortOrder to MySortOrder.Ascending sortColumn = e.Column; sortOrder = MySortOrder.Ascending; } if (sortColumn == UserNumberColumn) { listViewUsers.ListViewItemSorter = new LviIntColumnComparer(sortColumn, sortOrder); } else if (sortColumn == NameSurnameColumn) { listViewUsers.ListViewItemSorter = new LviNameSurnameColumnComparer(sortColumn, sortOrder); } else { listViewUsers.ListViewItemSorter = new LviTextColumnComparer(sortColumn, sortOrder); } listViewUsers.SetSortIcon(sortColumn, sortOrder); listViewUsers.Sort(); } private void editButton_Click(object sender, EventArgs e) { if (listViewUsers.SelectedItems.Count == 1 && listViewUsers.SelectedItems[0].Tag is User) { new Forms.EditSelectedUser(session, (User)listViewUsers.SelectedItems[0].Tag).ShowDialog(); ListUsers(); } } private void listViewUsers_DoubleClick(object sender, EventArgs e) { editButton_Click (sender, e); } private void addButton_Click(object sender, EventArgs e) { User newUser = new User(); if (new Forms.EditSelectedUser(session, newUser).ShowDialog() == DialogResult.OK) { listOfUsers.Add(newUser); } ListUsers(); } private void deleteButton_Click(object sender, EventArgs e) { if (listViewUsers.SelectedItems.Count == 1 && listViewUsers.SelectedItems[0].Tag is User) { User Selecteduser = listViewUsers.SelectedItems[0].Tag as User; session.Delete(Selecteduser); session.Flush(); listOfUsers.Remove(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; } IList remoteUsers; IList remoteGroups; ITransaction transaction = null; try { /// /// Create remote DB session and read remote users /// DB.DbType = GlobalData.RemoteUsersDB.DbType; DB.ConnectionString = GlobalData.RemoteUsersDB.ConnectionString; ISession remoteSession = DB.CreateSession(); remoteUsers = remoteSession.QueryOver().List(); remoteGroups = remoteSession.QueryOver().List(); /// /// Prepare local DB session /// DB.DbType = GlobalData.LocalUsersDB.DbType; DB.ConnectionString = GlobalData.LocalUsersDB.ConnectionString; ISession localSession = DB.CreateSession(); transaction = localSession.BeginTransaction(); /// /// Delete all local users /// IList users = localSession.QueryOver().List(); foreach (var user in users) localSession.Delete(user); IList groups = localSession.QueryOver().List(); foreach (var group in groups) localSession.Delete(group); /// /// Save all remote users to the local DB /// IList newUsers = new List(); IList newGroups = new 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); } localSession.SaveOrUpdate(newUser); } transaction.Commit(); localSession.Flush(); listOfUsers = newUsers; ListUsers(); MessageBox.Show(string.Format(Strings.N_users_copied, remoteUsers.Count), Strings.Confirmation, MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception) { if (transaction != null) transaction.Rollback(); MessageBox.Show(Strings.Copying_remote_users_failed, Strings.Confirmation, MessageBoxButtons.OK, MessageBoxIcon.Information); } } } }