private Usuario MapearUsuario(IDataReader dr)
        {
            var localidadDAC = new LocalidadDAC();
            var perfilUsrDAC = new PerfilUsrDAC();
            var idiomaDAC    = new IdiomaDAC();

            var usuario = new Usuario
            {
                Id          = GetDataValue <int>(dr, "Id"),
                RazonSocial = DescifrarTripleDES(GetDataValue <string>(dr, "RazonSocial")),
                Nombre      = DescifrarTripleDES(GetDataValue <string>(dr, "Nombre")),
                Apellido    = DescifrarTripleDES(GetDataValue <string>(dr, "Apellido")),
                Usr         = DescifrarTripleDES(GetDataValue <string>(dr, "Usr")),
                Psw         = DescifrarTripleDES(GetDataValue <string>(dr, "Psw")),
                CUIL        = DescifrarTripleDES(GetDataValue <string>(dr, "CUIL")),
                Estado      = GetDataValue <string>(dr, "Estado"),
                Email       = DescifrarTripleDES(GetDataValue <string>(dr, "Email")),
                Telefono    = DescifrarTripleDES(GetDataValue <string>(dr, "Telefono")),
                Direccion   = DescifrarTripleDES(GetDataValue <string>(dr, "Direccion")),
                Localidad   = localidadDAC.BuscarPorId(GetDataValue <int>(dr, "LocalidadId")), //Mapper
                PerfilUsr   = perfilUsrDAC.BuscarPorId(GetDataValue <int>(dr, "PerfilId")),    //Mapper
                Idioma      = idiomaDAC.BuscarPorId(GetDataValue <int>(dr, "IdiomaId")),       //Mapper
                FechaAlta   = GetDataValue <DateTime>(dr, "FechaAlta"),
                FechaBaja   = GetDataValue <DateTime>(dr, "FechaBaja"),
                DVH         = GetDataValue <Int64>(dr, "DVH")
            };

            return(usuario);
        }
        public Cliente RegistrarCliente(Usuario usuario)
        {
            usuario.RazonSocial = CifrarTripleDES(usuario.RazonSocial);
            usuario.CUIL        = CifrarTripleDES(usuario.CUIL);
            usuario.Direccion   = CifrarTripleDES(usuario.Direccion);
            usuario.Telefono    = CifrarTripleDES(usuario.Telefono);
            usuario.Email       = CifrarTripleDES(usuario.Email);

            const string sqlStatement = "INSERT INTO dbo.Cliente ([Id], [RazonSocial], [CUIL], [Email], [Telefono], [Direccion], [LocalidadId], [FechaAlta], [DVH]) " +
                                        "VALUES(@Id, @RazonSocial, @CUIL, @Email, @Telefono, @Direccion, @LocalidadId, @FechaAlta, @DVH);";

            var db = DatabaseFactory.CreateDatabase(ConnectionName);

            var perfilUsrDAC = new PerfilUsrDAC();
            var idiomaDAC    = new IdiomaDAC();
            var localidadDAC = new LocalidadDAC();
            var fechaHora    = DateTime.Now;


            using (var cmd = db.GetSqlStringCommand(sqlStatement))
            {
                db.AddInParameter(cmd, "@Id", DbType.Int32, usuario.Id);
                db.AddInParameter(cmd, "@RazonSocial", DbType.String, usuario.RazonSocial);
                db.AddInParameter(cmd, "@CUIL", DbType.String, usuario.CUIL);
                db.AddInParameter(cmd, "@Email", DbType.String, usuario.Email);
                db.AddInParameter(cmd, "@Telefono", DbType.String, usuario.Telefono);
                db.AddInParameter(cmd, "@Direccion", DbType.String, usuario.Direccion);
                db.AddInParameter(cmd, "@LocalidadId", DbType.Int32, usuario.Localidad.Id);
                db.AddInParameter(cmd, "@FechaAlta", DbType.DateTime, fechaHora);
                db.AddInParameter(cmd, "@DVH", DbType.Int64, 0);

                // Ejecuto la consulta.
                db.ExecuteScalar(cmd);

                var cliente = new Cliente
                {
                    Id          = usuario.Id,
                    RazonSocial = DescifrarTripleDES(usuario.RazonSocial),
                    CUIL        = DescifrarTripleDES(usuario.CUIL),
                    Email       = DescifrarTripleDES(usuario.Email),
                    Telefono    = DescifrarTripleDES(usuario.Telefono),
                    Direccion   = DescifrarTripleDES(usuario.Direccion),
                    Localidad   = localidadDAC.BuscarPorId(usuario.Localidad.Id), //Mapper
                    FechaAlta   = fechaHora,
                    DVH         = 0
                };

                return(cliente);
            }
        }
        public Usuario RegistrarUsuario(Usuario usr)
        {
            //Cifrar Datos
            usr.Psw         = CifrarTripleDES(usr.Psw);
            usr.Usr         = CifrarTripleDES(usr.Usr);
            usr.RazonSocial = CifrarTripleDES(usr.RazonSocial);
            usr.Nombre      = CifrarTripleDES(usr.Nombre);
            usr.Apellido    = CifrarTripleDES(usr.Apellido);
            usr.Direccion   = CifrarTripleDES(usr.Direccion);
            usr.CUIL        = CifrarTripleDES(usr.CUIL);
            usr.Telefono    = CifrarTripleDES(usr.Telefono);
            usr.Email       = CifrarTripleDES(usr.Email);

            const string sqlStatement = "INSERT INTO dbo.SEG_Usuario ([RazonSocial], [Nombre], [Apellido], [Usr], [Psw], [CUIL], " +
                                        "[Estado], [Intentos], [Email], [Telefono], " +
                                        "[Direccion], [LocalidadId], [FechaAlta], [FechaBaja], [PerfilId], [IdiomaId], [DVH]) " +

                                        "VALUES(@RazonSocial, @Nombre, @Apellido, @Usr, @Psw, @CUIL, " +
                                        "@Estado, @Intentos, @Email, @Telefono, " +
                                        "@Direccion, @LocalidadId, @FechaAlta, @FechaBaja, @PerfilId, @IdiomaId, @DVH); SELECT SCOPE_IDENTITY(); ";

            var db = DatabaseFactory.CreateDatabase(ConnectionName);

            var perfilUsrDAC = new PerfilUsrDAC();
            var idiomaDAC    = new IdiomaDAC();
            var localidadDAC = new LocalidadDAC();

            using (var cmd = db.GetSqlStringCommand(sqlStatement))
            {
                db.AddInParameter(cmd, "@RazonSocial", DbType.String, usr.RazonSocial);
                db.AddInParameter(cmd, "@Nombre", DbType.String, usr.Nombre);
                db.AddInParameter(cmd, "@Apellido", DbType.String, usr.Apellido);
                db.AddInParameter(cmd, "@Usr", DbType.String, usr.Usr);
                db.AddInParameter(cmd, "@Psw", DbType.String, usr.Psw);
                db.AddInParameter(cmd, "@CUIL", DbType.String, usr.CUIL);
                db.AddInParameter(cmd, "@Estado", DbType.String, usr.Estado);
                db.AddInParameter(cmd, "@Intentos", DbType.Int32, 0);
                db.AddInParameter(cmd, "@Email", DbType.String, usr.Email);
                db.AddInParameter(cmd, "@Telefono", DbType.String, usr.Telefono);
                db.AddInParameter(cmd, "@Direccion", DbType.String, usr.Direccion);
                db.AddInParameter(cmd, "@LocalidadId", DbType.Int32, usr.Localidad.Id);
                db.AddInParameter(cmd, "@FechaAlta", DbType.DateTime, usr.FechaAlta);
                db.AddInParameter(cmd, "@PerfilId", DbType.Int32, usr.PerfilUsr.Id);
                db.AddInParameter(cmd, "@IdiomaId", DbType.Int32, usr.Idioma.Id);
                db.AddInParameter(cmd, "@DVH", DbType.Int64, 0);
                db.AddInParameter(cmd, "@FechaBaja", DbType.DateTime, usr.FechaBaja);

                // Ejecuto la consulta y guardo el id que devuelve.
                usr.Id = (Convert.ToInt32(db.ExecuteScalar(cmd)));


                usr.PerfilUsr = perfilUsrDAC.BuscarPorId(usr.PerfilUsr.Id); // Mapper
                usr.Idioma    = idiomaDAC.BuscarPorId(usr.Idioma.Id);       // Mapper
                usr.Localidad = localidadDAC.BuscarPorId(usr.Localidad.Id); // Mapper
            }

            //DesCifrar Datos
            usr.Psw         = DescifrarTripleDES(usr.Psw);
            usr.Usr         = DescifrarTripleDES(usr.Usr);
            usr.RazonSocial = DescifrarTripleDES(usr.RazonSocial);
            usr.Nombre      = DescifrarTripleDES(usr.Nombre);
            usr.Apellido    = DescifrarTripleDES(usr.Apellido);
            usr.Direccion   = DescifrarTripleDES(usr.Direccion);
            usr.CUIL        = DescifrarTripleDES(usr.CUIL);
            usr.Telefono    = DescifrarTripleDES(usr.Telefono);
            usr.Email       = DescifrarTripleDES(usr.Email);

            return(usr);
        }