protected void Page_Load(object sender, EventArgs e) { if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return; } ErrMessage_Span.InnerHtml = ""; ErrMessage_Span.Style["display"] = "none"; Message_Span.InnerHtml = ""; Message_Span.Style["display"] = "none"; Master.Page.Title = "Control de acceso - Asociación entre compañías y usuarios"; if (!Page.IsPostBack) { HtmlGenericControl MyHtmlH2; MyHtmlH2 = (HtmlGenericControl)(Master.FindControl("PageTitle_TableCell")); if (MyHtmlH2 != null) { MyHtmlH2.InnerHtml = "Control de acceso - Asociación entre compañías y usuarios"; } dbContabUsersEntities usersContext = new dbContabUsersEntities(); List <Compania> companias = usersContext.Companias.OrderBy(c => c.NombreCorto).ToList(); Companias_ListBox.DataSource = companias; Companias_ListBox.DataTextField = "NombreCorto"; Companias_ListBox.DataValueField = "Numero"; Companias_ListBox.DataBind(); Usuarios_ListBox.DataSource = Membership.GetAllUsers(); Usuarios_ListBox.DataBind(); } else { } }
public ConstruirListaCompaniasAsignadas() { // para crear la lista de compañías, siempre en base a las que se han asignado al usuario ... var currentUser = Membership.GetUser(); // el usuario en la tabla de compañías y usuarios es de tipo uniqueIdentifier (Guid) Guid userID = new Guid(currentUser.ProviderUserKey.ToString()); dbContabUsersEntities userContext = new dbContabUsersEntities(); // nótese como determinamos las compañías que se han asignado al usuario. De no haber ninguna, asumimos todas List <CompaniasYUsuario> companiasAsignadas = userContext.CompaniasYUsuarios.Where(c => c.Usuario == userID).ToList <CompaniasYUsuario>(); if (companiasAsignadas.Count() == 0) { // si el usuario no tiene compañías asignadas, asumimos todas _companias = userContext.Companias.OrderBy(c => c.Nombre).ToList(); } else { List <Compania> companias = userContext.Companias.OrderBy(c => c.Nombre).ToList(); // seleccionamos solo las compañías que existen en la lista anterior (companiasAsignadas) _companias = companias.Where(c => companiasAsignadas.Any(x => x.Compania == c.Numero)).ToList <Compania>(); } }
protected void LeerUsuarios_LinkButton_Click(object sender, EventArgs e) { // nos aseguramos que se haya seleccionado solo una compañía Int16 nItemsSelectedCount = 0; foreach (ListItem MyItem in Companias_ListBox.Items) { if (MyItem.Selected) { nItemsSelectedCount++; } } switch (nItemsSelectedCount) { case 0: ErrMessage_Span.InnerHtml = "Ud. debe seleccionar una compañía de la lista de compañías."; ErrMessage_Span.Style["display"] = "block"; return; case 1: break; default: ErrMessage_Span.InnerHtml = "Ud. debe seleccionar SOLO una compañía de la lista de compañías."; ErrMessage_Span.Style["display"] = "block"; return; } // obtenemos los usuarios asociados a la compañía y los seleccionamos en el listbox de usuarios int companiaSeleccionadaID = Convert.ToInt32(Companias_ListBox.SelectedValue); dbContabUsersEntities usersContext = new dbContabUsersEntities(); List <CompaniasYUsuario> usuarios = usersContext.CompaniasYUsuarios.Where(c => c.Compania == companiaSeleccionadaID).ToList(); // primero deseleccionamos todos los items en el listbox foreach (ListItem MyItem in Usuarios_ListBox.Items) { MyItem.Selected = false; } // si no hay usuarios para el rol, salimos ahora if (usuarios.Count() == 0) { return; } // para cada usuario leído para la compañía, lo buscamos y seleccionamos foreach (CompaniasYUsuario usuario in usuarios) { aspnet_Users user = usersContext.aspnet_Users.Where(u => u.UserId == usuario.Usuario).FirstOrDefault(); foreach (ListItem item in Usuarios_ListBox.Items) { if (item.Text == user.UserName) { item.Selected = true; break; } } } }
protected void AsociarCompaniasAUsurioSeleccionado_Button_Click(object sender, EventArgs e) { // asociamos uno o varios roles seleccionados a un usuario seleccionado // debe haber un usuario (solo uno) seleccionado // nos aseguramos que se haya seleccionado solo un usuario Int16 nItemsSelectedCount = 0; foreach (ListItem MyItem in Usuarios_ListBox.Items) { if (MyItem.Selected) { nItemsSelectedCount++; } } switch (nItemsSelectedCount) { case 0: ErrMessage_Span.InnerHtml = "Ud. debe seleccionar un usuario de la lista de usuarios."; ErrMessage_Span.Style["display"] = "block"; return; case 1: break; default: ErrMessage_Span.InnerHtml = "Ud. debe seleccionar SOLO un usuario de la lista de usuarios."; ErrMessage_Span.Style["display"] = "block"; return; } // nótese que puede no haber compañías seleccionadas, pues se puede querer quitar las que estaban seleccionadas a un usuario nItemsSelectedCount = 0; foreach (ListItem MyItem in Companias_ListBox.Items) { if (MyItem.Selected) { nItemsSelectedCount++; } } //if (nItemsSelectedCount == 0) //{ // ErrMessage_Span.InnerHtml = "Ud. debe seleccionar al menos una compañía de la lista de compañías."; // ErrMessage_Span.Style["display"] = "block"; // return; //} // primero eliminamos las compañías que ahora corresponan al usuario dbContabUsersEntities usersContext = new dbContabUsersEntities(); var userID = usersContext.aspnet_Users.Where(u => u.UserName == Usuarios_ListBox.SelectedValue).FirstOrDefault().UserId; usersContext.ExecuteStoreCommand("Delete From CompaniasYUsuarios Where Usuario = @usuario", new SqlParameter { ParameterName = "usuario", Value = userID }); CompaniasYUsuario companiaYUsuario; foreach (ListItem compania in Companias_ListBox.Items) { if (!compania.Selected) { continue; } companiaYUsuario = new CompaniasYUsuario(); companiaYUsuario.Usuario = userID; companiaYUsuario.Compania = Convert.ToInt32(compania.Value); usersContext.CompaniasYUsuarios.AddObject(companiaYUsuario); } usersContext.SaveChanges(); Message_Span.InnerHtml = "Ok, las compañías seleccionadas <b>(" + Companias_ListBox.GetSelectedIndices().Count().ToString() + ")</b> han sido asociadas al usuario " + Usuarios_ListBox.SelectedValue + ".<br />" + "El usuario " + Usuarios_ListBox.SelectedValue + " solo tendrá acceso a estas compañías"; Message_Span.Style["display"] = "block"; }
protected void LeerCompanias_LinkButton_Click(object sender, EventArgs e) { // nos aseguramos que se haya seleccionado solo un usuario Int16 nItemsSelectedCount = 0; foreach (ListItem MyItem in Usuarios_ListBox.Items) { if (MyItem.Selected) { nItemsSelectedCount++; } } switch (nItemsSelectedCount) { case 0: ErrMessage_Span.InnerHtml = "Ud. debe seleccionar un usuario de la lista de usuarios."; ErrMessage_Span.Style["display"] = "block"; return; case 1: break; default: ErrMessage_Span.InnerHtml = "Ud. debe seleccionar SOLO un usuario de la lista de usuarios."; ErrMessage_Span.Style["display"] = "block"; return; } // leemos el usuario seleccionado dbContabUsersEntities usersContext = new dbContabUsersEntities(); aspnet_Users usuario = usersContext.aspnet_Users.Where(u => u.UserName == Usuarios_ListBox.SelectedValue).FirstOrDefault(); // ahora leemos las compañías asociadas al usuario ... List <CompaniasYUsuario> companias = usersContext.CompaniasYUsuarios.Where(c => c.Usuario == usuario.UserId).ToList(); // primero deseleccionamos todos los items en el listbox foreach (ListItem MyItem in Companias_ListBox.Items) { MyItem.Selected = false; } // si no hay usuarios para el rol, salimos ahora if (companias.Count() == 0) { return; } // finalmente, seleccionamos cada compañía en la lista foreach (CompaniasYUsuario compania in companias) { foreach (ListItem item in Companias_ListBox.Items) { if (item.Value == compania.Compania.ToString()) { item.Selected = true; } } } }
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { // intentamos seleccionar la compañia que el usuario selecciona en la lista ... if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return; } string usuario = User.Identity.Name; int? pk = Convert.ToInt32(GridView1.SelectedDataKey.Value.ToString()); if (pk != null) { dbContabUsersEntities context = new dbContabUsersEntities(); var query = context.tCiaSeleccionadas.Where(s => s.UsuarioLS == usuario); foreach (tCiaSeleccionada s in query) { context.tCiaSeleccionadas.DeleteObject(s); } Compania compania = context.Companias.Where(c => c.Numero == pk.Value).FirstOrDefault(); if (compania == null) { string errorMessage = "Error inesperado: no hemos podido encontrar la compañía en la tabla Compañías."; CustomValidator1.IsValid = false; CustomValidator1.ErrorMessage = errorMessage; return; } tCiaSeleccionada ciaSeleccionada = new tCiaSeleccionada() { CiaSeleccionada = compania.Numero, Nombre = compania.Nombre, NombreCorto = compania.NombreCorto, UsuarioLS = usuario, Usuario = 0 }; context.tCiaSeleccionadas.AddObject(ciaSeleccionada); try { context.SaveChanges(); this.nombreCompaniaSeleccionada_literal.Text = compania.Nombre; } catch (Exception ex) { string errorMessage = ex.Message; if (ex.InnerException != null) { errorMessage += "<br /><br />" + ex.InnerException.Message; } CustomValidator1.IsValid = false; CustomValidator1.ErrorMessage = errorMessage; return; } finally { context = null; } } }
protected void Page_Load(object sender, EventArgs e) { if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return; } Master.Page.Title = "ContabSysNet - Generales - Seleccionar una compañía"; if (!Page.IsPostBack) { // Gets a reference to a Label control that is not in a // ContentPlaceHolder control HtmlContainerControl MyHtmlSpan; MyHtmlSpan = (HtmlContainerControl)Master.FindControl("AppName_Span"); if (!(MyHtmlSpan == null)) { MyHtmlSpan.InnerHtml = "Generales"; } HtmlGenericControl MyHtmlH2; MyHtmlH2 = (HtmlGenericControl)Master.FindControl("PageTitle_TableCell"); if (!(MyHtmlH2 == null)) { // sub título para la página MyHtmlH2.InnerHtml = "Seleccionar una compañía Contab"; } var currentUser = Membership.GetUser(); // el usuario en la tabla de compañías y usuarios es de tipo uniqueIdentifier (Guid) Guid userID = new Guid(currentUser.ProviderUserKey.ToString()); dbContabUsersEntities userContext = new dbContabUsersEntities(); // nótese como determinamos las compañías que se han asignado al usuario. De no haber ninguna, asumimos todas List <CompaniasYUsuario> companiasAsignadas = userContext.CompaniasYUsuarios.Where(c => c.Usuario == userID). ToList <CompaniasYUsuario>(); if (companiasAsignadas.Count() == 0) { // si el usuario no tiene compañías asignadas, asumimos todas List <Compania> companias = userContext.Companias.OrderBy(c => c.Nombre).ToList(); this.GridView1.DataSource = companias; this.GridView1.DataBind(); } else { List <Compania> companias = userContext.Companias.OrderBy(c => c.Nombre).ToList(); // seleccionamos solo las compañías que existen en la lista anterior (companiasAsignadas) var companias2 = companias.Where(c => companiasAsignadas.Any(x => x.Compania == c.Numero)).ToList <Compania>(); this.GridView1.DataSource = companias2; this.GridView1.DataBind(); } // ahora leemos la compañía seleccionada por el usuario para mostrarla en la página string usuario = User.Identity.Name; dbContabUsersEntities context = new dbContabUsersEntities(); var companiaSeleccionada = context.tCiaSeleccionadas.Where(s => s.UsuarioLS == usuario).FirstOrDefault(); string nombreCiaSeleccionada = ""; if (companiaSeleccionada == null) { nombreCiaSeleccionada = "No hay una compañía Contab seleccionada"; } else { nombreCiaSeleccionada = companiaSeleccionada.Nombre; } this.nombreCompaniaSeleccionada_literal.Text = nombreCiaSeleccionada; } }