public Stream AdminPermisosRolCUD(List<RolMenu> nuevos, List<RolMenu> viejos, List<RolMenu> eliminados)
        {
            var db = new CoomuceEntities();
            var transaction = db.Database.BeginTransaction();

            try
            {
                // hay datos para eliminar?
                if (eliminados.Count > 0)
                {
                    // marcar registros para eliminar
                    eliminados.ForEach(e => db.Entry(e).State = EntityState.Deleted);

                    // eliminar registros
                    db.RolMenu.RemoveRange(eliminados);
                }

                // hay datos para actualizar?
                if (viejos.Count > 0)
                {
                    viejos.ForEach(v => db.Entry(v).State = EntityState.Modified);
                }

                // hay datos para adicionar?
                if (nuevos.Count > 0)
                {
                    // agregar rango de nuevos registros
                    db.RolMenu.AddRange(nuevos);
                }

                // guardo datos y confirmo transacción
                db.SaveChanges();
                transaction.Commit();

                return gen.EscribirJson(new { message = Mensajes.Guardar, success = true });
            }
            catch (Exception ex)
            {
                transaction.Rollback();

                return gen.EscribirJson(new { message = string.Format(Mensajes.Error, ex.Message), success = false });
            }
        }
        public Stream AdminUsuarioCUD(List<Usuario> nuevos, List<Usuario> viejos, List<Usuario> eliminados)
        {
            var db = new CoomuceEntities();
            var transaction = db.Database.BeginTransaction();

            try
            {
                // hay datos para eliminar?
                if (eliminados.Count > 0)
                {
                    // marcar registros para eliminar
                    eliminados.ForEach(e => db.Entry(e).State = EntityState.Deleted);

                    // eliminar registros
                    db.Usuario.RemoveRange(eliminados);
                }

                // hay datos para actualizar?
                if (viejos.Count > 0)
                {
                    // obtengo los id's de los items editados
                    var listaId = viejos.Select(v => v.idUsuario).ToList();

                    // obtengo los items editados
                    var itemEditar = db.Usuario.Where(r => listaId.Contains(r.idUsuario)).ToList();

                    // obtengo los datos editados
                    itemEditar.ForEach(r =>
                    {
                        var v = viejos.Where(i => i.idUsuario == r.idUsuario).FirstOrDefault();

                        r.idTipoIdentificacion = v.idTipoIdentificacion;
                        r.identificacionUsuario = v.identificacionUsuario;
                        r.primerApellidoUsuario = v.primerApellidoUsuario;
                        r.segundoApellidoUsuario = v.segundoApellidoUsuario;
                        r.primerNombreUsuario = v.primerNombreUsuario;
                        r.segundoNombreUsuario = v.segundoNombreUsuario;
                        r.emailUsuario = v.emailUsuario;
                        r.celularUsuario = v.celularUsuario;
                        r.idRol = v.idRol;
                        r.estaHabilitadoUsuario = v.estaHabilitadoUsuario;
                    });
                }

                // hay datos para adicionar?
                if (nuevos.Count > 0)
                {
                    foreach (var item in nuevos)
                    {
                        // obtener login de usuario
                        string loginUsuario = string.Format("{0}{1}{2}",
                            item.primerNombreUsuario.Substring(0, 1),
                            item.primerApellidoUsuario.Replace(" ", ""),
                            (string.IsNullOrEmpty(item.segundoApellidoUsuario) ? "" : item.segundoApellidoUsuario.Substring(0, 1)));

                        // verificar si hay un usuario con el mismo login
                        var existenLogin = db.Usuario
                            .Where(r => r.loginUsuario.Substring(0, loginUsuario.Length).Equals(loginUsuario))
                            .Count();

                        // se encontro usuarios con el mismo login?
                        if (existenLogin > 0)
                        {
                            existenLogin++;

                            loginUsuario += existenLogin.ToString();
                        }
                        item.loginUsuario = loginUsuario;

                        // se genera la contraseña
                        item.passwordUsuario = Membership.GeneratePassword(12, 0);
                        RNGCryptoServiceProvider provider = new RNGCryptoServiceProvider();
                        byte[] data = new byte[5];
                        provider.GetBytes(data);
                        item.passwordSaltUsuario = Convert.ToBase64String(data);

                        item.passwordHashUsuario = FormsAuthentication.HashPasswordForStoringInConfigFile(item.passwordUsuario + item.passwordSaltUsuario, "SHA1");
                    }

                    // agregar rango de nuevos registros
                    db.Usuario.AddRange(nuevos);
                }

                // guardo datos y confirmo transacción
                db.SaveChanges();
                transaction.Commit();

                // hay nuevos datos?, si es asi enviamos los correos con las claves de acceso
                if (nuevos.Count > 0)
                {
                    foreach (var item in nuevos)
                    {
                        bool credencialesEnviadas = false;

                        credencialesEnviadas = gen.EnviarCorreo(item, 0);
                    }
                }

                return gen.EscribirJson(new { message = Mensajes.Guardar, success = true });
            }
            catch (Exception ex)
            {
                transaction.Rollback();

                return gen.EscribirJson(new { message = string.Format(Mensajes.Error, ex.Message), success = false });
            }
        }