Example #1
0
        /// <summary>
        /// Ejecuta las acciones en el repositorio para crear un nuevo usuario
        /// La Password se setea dentro de la misma transaccion que crea el Usuario
        /// En caso de que la Persona asociada tambien sea nueva, se agregara automaticamente
        /// </summary>
        /// <param name="user"></param>
        /// <param name="pass"></param>
        public void CrearUsuario(Usuario user, string pass)
        {
            OMBContext ctx = DB.Contexto;

            using (var trans = ctx.Database.BeginTransaction())
            {
                try
                {
                    ctx.Usuarios.Add(user);

                    if (ctx.VerboseMode)
                    {
                        ctx.MostrarCambios("Cambios en CT para CrearUsuario(user, pass)");
                    }

                    ctx.SaveChanges();

                    var query = CrearQueryCambioPassword(user.Login, pass);

                    int resultado = query.FirstOrDefault();

                    if (resultado != 1)
                    {
                        throw new OMBDataPersistenceError("Error al intentar setear la password para el usuario", null);
                    }

                    trans.Commit();
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    throw new OMBDataPersistenceError("Error al intentar agregar un nuevo Usuario", ex);
                }
            }
        }
Example #2
0
        /// <summary>
        /// Realiza la tarea concreta de eliminar el Usuario y los perfiles que tiene asociado
        /// Se da la opcion para eliminar la Persona asociada al usuario tambien
        /// </summary>
        /// <param name="login"></param>
        /// <param name="eliminarPersona"></param>
        public void EliminarUsuario(string login, bool eliminarPersona)
        {
            OMBContext ctx  = DB.Contexto;
            Usuario    user = (from u in ctx.Usuarios.Include("Persona").Include("Perfiles")
                               where u.Login == login
                               select u).SingleOrDefault();

            if (user != null)
            {
                //  Si lo hago al reves (primero Remove(user)) cuando quiero hacer Remove(user.Persona) resulta que ya la
                //  nav-prop esta seteada en null y por supuesto da error...
                if (eliminarPersona)
                {
                    ctx.Personas.Remove(user.Persona);
                }

                ctx.Usuarios.Remove(user);

                if (ctx.VerboseMode)
                {
                    ctx.MostrarCambios("Cambios en CT para EliminarUsuario(login, bool)");
                }

                ctx.SaveChanges();
            }
        }
Example #3
0
        /// <summary>
        /// Si el usuario fue modificado y ademas quiero cambiar la password, ejecuta ambas operaciones
        /// dentro de una transaccion
        /// De otro modo, hace una de las dos normalmente (sin transaccion)
        /// </summary>
        /// <param name="user"></param>
        /// <param name="newPass"></param>
        public void ModificarUsuario(Usuario user, string newPass = null)
        {
            OMBContext ctx = DB.Contexto;
            bool       fUserChanged;

            fUserChanged = ctx.ChangeTracker.HasChanges();
            if (fUserChanged && newPass != null)
            {
                using (var trans = ctx.Database.BeginTransaction())
                {
                    try
                    {
                        if (ctx.VerboseMode)
                        {
                            ctx.MostrarCambios("Cambios en CT para ModificarUsuario(user, pass)");
                        }

                        ctx.SaveChanges();

                        var query = CrearQueryCambioPassword(user.Login, newPass);

                        int resultado = query.FirstOrDefault();

                        if (resultado != 1)
                        {
                            throw new OMBDataPersistenceError("Error al intentar setear la password para el usuario", null);
                        }

                        trans.Commit();
                    }
                    catch (Exception ex)
                    {
                        trans.Rollback();
                        throw new OMBDataPersistenceError("Error al intentar actualizar el usuario o la password", ex);
                    }
                }
            }
            else
            {
                if (fUserChanged)
                {
                    try
                    {
                        ctx.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        throw new OMBDataPersistenceError("Error al intentar actualizar el Usuario", ex);
                    }
                }
                else
                {
                    if (newPass != null)
                    {
                        try
                        {
                            var query = CrearQueryCambioPassword(user.Login, newPass);

                            int resultado = query.FirstOrDefault();

                            if (resultado != 1)
                            {
                                throw new OMBDataPersistenceError("Error al intentar setear la password para el usuario", null);
                            }
                        }
                        catch (Exception ex)
                        {
                            throw new OMBDataPersistenceError("Error al intentar actualizar la password", ex);
                        }
                    }
                }
            }
        }