예제 #1
0
        public static void ModificarRolYFuncionalidades(Rol rol)
        {
            /*
             * Lo tengo que hacer transaccionado ya que no quiero que pueda llegar a quedar un rol insertado
             * sin las funcionalidades asociadas debido a un error
             */
            using (var transaccion = DBManager.Instance().Connection.BeginTransaction(IsolationLevel.Serializable))
            {
                try
                {
                    Actualizar(rol, transaccion);

                    if (FuncionalidadPersistencia.EliminarPorRol(rol, transaccion) > 0)
                        if (FuncionalidadPersistencia.InsertarPorRol(rol, transaccion) > 0)
                        {
                            //La unica forma que se realice la transaction: borro todas las funcionalidades viejas e inserto las nuevas
                            transaccion.Commit();
                        }
                        else
                            //Tuvo que haber insertado por lo menos una, sino es un error
                            transaccion.Rollback();
                    else
                        //Tuvo que haber insertado por lo menos una, sino es un error
                        transaccion.Rollback();
                }
                catch (Exception)
                {
                    transaccion.Rollback();
                    throw new Exception("Se produjo un error durante la modificacion del rol");
                }
            }
        }
        public static List<Funcionalidad> ObtenerPorRol(Rol rol)
        {
            //Obtengo todas las funcionalidades asociadas a determinado rol
            var param = new List<SPParameter> { new SPParameter("ID_Rol", rol.ID) };
            var sp = new StoreProcedure(DBQueries.Funcionalidad.SPGetFuncionalidadesPorRol, param);

            //Retorno una lista de Funcionalidad a partir de un ExecuteReader
            return sp.ExecuteReader<Funcionalidad>();
        }
        public FrmABMRolAltasModificaciones(Rol rol)
        {
            InitializeComponent();

            //Si no se le pasa ningún rol por parámetro (NULL) se considera que esta trabajando en modo alta
            modoModificacion = !(rol == null);

            if (modoModificacion)
                RolActual = rol;
        }
        public static int EliminarPorRol(Rol rol, SqlTransaction transaccion)
        {
            var param = new List<SPParameter> { new SPParameter("ID_Rol", rol.ID) };
            var sp = (transaccion != null)
                ?new StoreProcedure(DBQueries.Rol.SPEliminarFuncionalidadesPorRol, param,transaccion)
                            : new StoreProcedure(DBQueries.Rol.SPEliminarFuncionalidadesPorRol, param);

            //Retorno la cantidad de funcionalidades eliminadas a partir de un ExecuteNonQuery
            return sp.ExecuteNonQuery(transaccion);
        }
예제 #5
0
        public static int Actualizar(Rol rol, SqlTransaction transaccion)
        {
            var param = new List<SPParameter>
                {
                    new SPParameter("ID_Rol", rol.ID),
                    new SPParameter("Descripcion", rol.Descripcion),
                    new SPParameter("Habilitado", rol.Habilitado)
                };

            var sp = (transaccion != null)
                        ? new StoreProcedure(DBQueries.Rol.SPActualizarRolPorID, param, transaccion)
                        : new StoreProcedure(DBQueries.Rol.SPActualizarRolPorID, param);

            return sp.ExecuteNonQuery(transaccion);
        }
        public static int InsertarPorRol(Rol rol, SqlTransaction transaccion)
        {
            var regsAfectados = 0;

            foreach (var feature in rol.Funcionalidades)
            {
                var param = new List<SPParameter> { new SPParameter("ID_Funcionalidad", feature.ID), new SPParameter("ID_Rol", rol.ID) };
                var sp = (transaccion != null)
                            ? new StoreProcedure(DBQueries.Rol.SPInsertarFuncionalidadPorRol, param,transaccion)
                            : new StoreProcedure(DBQueries.Rol.SPInsertarFuncionalidadPorRol, param);

                regsAfectados += sp.ExecuteNonQuery(transaccion);
            }

            //Retorno la cantidad de funcionalidades insertadas a partir de un ExecuteNonQuery
            return regsAfectados;
        }
예제 #7
0
        public static void InsertarRolYFucionalidades(Rol rol)
        {
            /*
             * Lo tengo que hacer transaccionado ya que no quiero que pueda llegar a quedar un rol insertado
             * sin las funcionalidades asociadas debido a un error
             */
            using (var transaccion = DBManager.Instance().Connection.BeginTransaction(IsolationLevel.Serializable))
            {
                try
                {
                    rol = Insertar(rol, transaccion);
                    FuncionalidadPersistencia.InsertarPorRol(rol, transaccion);

                    transaccion.Commit();
                }
                catch (Exception)
                {
                    transaccion.Rollback();
                    throw new Exception("Se produjo un error durante la insercion del rol");
                }
            }
        }
예제 #8
0
        private static Rol Insertar(Rol rol, SqlTransaction transaccion)
        {
            var param = new List<SPParameter>
                {
                    new SPParameter("Descripcion", rol.Descripcion),
                    new SPParameter("Habilitado", rol.Habilitado)
                };

            var sp = (transaccion != null)
                        ? new StoreProcedure(DBQueries.Rol.SPInsertarRol, param, transaccion)
                        : new StoreProcedure(DBQueries.Rol.SPInsertarRol, param);

            rol.ID = (int)sp.ExecuteScalar(transaccion);

            return rol;
        }
        private void BtnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                #region Validations

                var exceptionMessage = string.Empty;

                if (string.IsNullOrEmpty(TxtRol.Text))
                    exceptionMessage += "El nombre del rol no puede ser vacío.";

                if (LstFuncionalidades.CheckedItems.Count == 0)
                    exceptionMessage += Environment.NewLine + "Debe seleccionar por lo menos una funcionalidad.";

                if (!string.IsNullOrEmpty(exceptionMessage))
                    throw new Exception(exceptionMessage);

                #endregion

                if (!modoModificacion)
                {
                    //Valido que no exista un rol con la descripcion informada
                    if (RolPersistencia.ObtenerRolPorNombre(TxtRol.Text) != null)
                        throw new Exception("Ya existe un rol con el nombre ingresado.");

                    #region Inserto el rol con sus funcionalidades

                    var rol = new Rol();
                    rol.Habilitado = !(ChkInhabilitado.Checked);
                    rol.Descripcion = TxtRol.Text;

                    //A partir de los items chequeados, seteo las funcionalidades del objeto a insertar
                    foreach (var checkedItem in LstFuncionalidades.CheckedItems)
                    {
                        var funcionalidad = (Funcionalidad)checkedItem;
                        rol.Funcionalidades.Add(funcionalidad);
                    }

                    var dialogAnswer = MessageBox.Show("Esta seguro que quiere insertar el nuevo rol?", "Atencion", MessageBoxButtons.YesNo);
                    if (dialogAnswer == DialogResult.Yes)
                    {
                        //Impacto en la base
                        RolPersistencia.InsertarRolYFucionalidades(rol);
                        AccionCompleta = true;
                        Close();
                    }

                    #endregion
                }
                else
                {
                    #region Modifico un rol existente y sus funcionalidades

                    RolActual.Habilitado = !(ChkInhabilitado.Checked);
                    RolActual.Descripcion = TxtRol.Text;
                    RolActual.Funcionalidades = new List<Funcionalidad>();

                    //A partir de los items chequeados, seteo las funcionalidades del objeto a insertar
                    foreach (var checkedItem in LstFuncionalidades.CheckedItems)
                    {
                        var feature = (Funcionalidad)checkedItem;
                        RolActual.Funcionalidades.Add(feature);
                    }

                    var dialogAnswer = MessageBox.Show(string.Format("Esta seguro que quiere modificar el rol {0}?", RolActual.Descripcion), "Atencion", MessageBoxButtons.YesNo);
                    if (dialogAnswer == DialogResult.Yes)
                    {
                        //Impacto en la base
                        RolPersistencia.ModificarRolYFuncionalidades(RolActual);
                        AccionCompleta = true;
                        Close();
                    }

                    #endregion
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Atención");
            }
        }