private async Task <bool> SaveAsync()
        {
            _dataInput = Input;
            var valor = false;

            if (ModelState.IsValid)
            {
                var userList = _userManager.Users.Where(u => u.Email.Equals(Input.Email)).ToList();
                if (userList.Count.Equals(0))
                {
                    var strategy = _context.Database.CreateExecutionStrategy();
                    await strategy.ExecuteAsync(async() => {
                        using (var transaction = _context.Database.BeginTransaction())
                        {
                            try
                            {
                                var user = new IdentityUser
                                {
                                    UserName    = Input.Email,
                                    Email       = Input.Email,
                                    PhoneNumber = Input.PhoneNumber
                                };
                                var result = await _userManager.CreateAsync(user, Input.Password);
                                if (result.Succeeded)
                                {
                                    await _userManager.AddToRoleAsync(user, Input.Role);
                                    var dataUser  = _userManager.Users.Where(u => u.Email.Equals(Input.Email)).ToList().Last();
                                    var imageByte = await _uploadimage.ByteAvatarImageAsync(
                                        Input.AvatarImage, _environment, "images/images/default.png");
                                    var t_user = new TUsers
                                    {
                                        Name     = Input.Name,
                                        LastName = Input.LastName,
                                        NID      = Input.NID,
                                        Email    = Input.Email,
                                        IdUser   = dataUser.Id,
                                        Image    = imageByte,
                                    };
                                    await _context.AddAsync(t_user);
                                    _context.SaveChanges();

                                    transaction.Commit();
                                    _dataInput = null;
                                    valor      = true;
                                }
                                else
                                {
                                    foreach (var item in result.Errors)
                                    {
                                        _dataInput.ErrorMessage = item.Description;
                                    }
                                    valor = false;
                                    transaction.Rollback();
                                }
                            }
                            catch (Exception ex)
                            {
                                _dataInput.ErrorMessage = ex.Message;
                                transaction.Rollback();
                                valor = false;
                            }
                        }
                    });
                }
                else
                {
                    _dataInput.ErrorMessage = $"El {Input.Email} ya esta registrado";
                    valor = false;
                }
            }
            else
            {
                foreach (var modelState in ModelState.Values)
                {
                    foreach (var error in modelState.Errors)
                    {
                        _dataInput.ErrorMessage += error.ErrorMessage;
                    }
                }
                valor = false;
            }

            return(valor);
        }
        private async Task <bool> SaveAsync()
        {
            _dataInput = Input;
            var valor = false;

            if (ModelState.IsValid)
            {
                var clientList = _context.TClients.Where(u => u.Nid.Equals(Input.Nid)).ToList();
                if (clientList.Count.Equals(0))
                {
                    var strategy = _context.Database.CreateExecutionStrategy();
                    await strategy.ExecuteAsync(async() => {
                        using (var transaction = _context.Database.BeginTransaction())
                        {
                            try
                            {
                                var imageByte = await _uploadimage.ByteAvatarImageAsync(
                                    Input.AvatarImage, _environment, "images/images/default.png");
                                var client = new TClients
                                {
                                    Name      = Input.Name,
                                    LastName  = Input.LastName,
                                    Nid       = Input.Nid,
                                    Email     = Input.Email,
                                    Image     = imageByte,
                                    Phone     = Input.Phone,
                                    Direccion = Input.Direction,
                                    Credit    = Input.Credit,
                                    Date      = DateTime.Now
                                };
                                await _context.AddAsync(client);
                                _context.SaveChanges();

                                var report = new TReports_clients
                                {
                                    Debt        = 0.0m,
                                    Monthly     = 0.0m,
                                    Change      = 0.0m,
                                    LastPayment = 0.0m,
                                    CurrentDebt = 0.0m,
                                    Ticket      = "0000000000",
                                    TClients    = client
                                };
                                await _context.AddAsync(report);
                                _context.SaveChanges();
                                transaction.Commit();
                                _dataInput = null;
                                valor      = true;
                            }
                            catch (Exception ex)
                            {
                                _dataInput.ErrorMessage = ex.Message;
                                transaction.Rollback();
                                valor = false;
                            }
                        }
                    });
                }
                else
                {
                    _dataInput.ErrorMessage = $"El {Input.Nid} ya esta registrado";
                    valor = false;
                }
            }
            else
            {
                foreach (var modelState in ModelState.Values)
                {
                    foreach (var error in modelState.Errors)
                    {
                        _dataInput.ErrorMessage += error.ErrorMessage;
                    }
                }
                valor = false;
            }
            return(valor);
        }
        public async Task <bool> SaveAsync()//retorna tarea false o true
        {
            //obejto que se inicializa con el obejto inputmodel y la variable
            _DataInput = Input;
            var valor = false;

            if (ModelState.IsValid)//si el dato ingresado no es igual a seleccione un rol
            {
                //con este objeto userlist le asignamos el objeto Usermanager que llamara a la tabla User de la BDA y metodo where para hacer una consulta
                //creo objeto u que manejara la infor de nuestros usuario y este objeto llamara a la propiedad email y se comparara y si ya hay este obejto
                //contendra la informacion de ese usuario si esta registradro no podra registrase y si es el contrario lo convertirar en una lista
                var userList = _UserManager.Users.Where(u => u.Email.Equals(Input.Email)).ToList();
                if (userList.Count.Equals(0))//aqui evaluare userlisst contaremos cuantos elementos tienen este objeto si es 0 no existe el usuario
                {
                    //este objeto utilizara transacciones para poder administrar los SP para insertar datos a las tablas
                    var strategy = _context.Database.CreateExecutionStrategy();
                    await strategy.ExecuteAsync(async() => {
                        using (var transaction = _context.Database.BeginTransaction())
                        {
                            try
                            {
                                var user = new IdentityUser //clase que administra los usuarios identityuser
                                {
                                    UserName    = Input.Email,
                                    Email       = Input.Email,
                                    PhoneNumber = Input.PhoneNumber
                                };
                                var resultado = await _UserManager.CreateAsync(user, Input.Password);
                                if (resultado.Succeeded)
                                {
                                    await _UserManager.AddToRoleAsync(user, Input.Role);
                                    //el datauser le asignamos usermanger para realizar consulta en la tabla users del ultimo usuario que ya se registro
                                    var datauser = _UserManager.Users.Where(u => u.Email.Equals(Input.Email)).ToList().Last();
                                    //manejar la foto onj imagebyte dela clase _uploadimage llamamos al metodobyte convertir image en byte e insertar informacion en tabla
                                    var imageByte = await _uploadimage.ByteAvatarImageAsync(Input.AvatarImage, _environment, "images/images/login.png");
                                    var t_user    = new TUsers
                                    {
                                        Name      = Input.Name,
                                        LastName  = Input.LastName,
                                        Documento = Input.Cedula,
                                        Telefono  = Input.PhoneNumber,
                                        Email     = Input.Email,
                                        IdUser    = datauser.Id,//obtener el ultimo usuario
                                        Image     = imageByte,
                                        //esta info la vamos a insertar en la tabla Tuser
                                    };
                                    await _context.AddAsync(t_user);//agramos usuario
                                    _context.SaveChanges();

                                    transaction.Commit(); //este metodo todos lo sp de insertado se han ejecutado satisfactoriamente en las dos tablas de user
                                    _DataInput = null;
                                    valor      = true;    //esto indica la insercion del usuario
                                }
                                else
                                {
                                    foreach (var item in resultado.Errors)
                                    {
                                        _DataInput.ErrorMessage = item.Description;
                                    }
                                    valor = false;
                                    transaction.Rollback();
                                }
                            }
                            catch (Exception ex)
                            {
                                _DataInput.ErrorMessage = ex.Message;
                                transaction.Rollback();
                                valor = false;
                            }
                        }
                    });
                }
                else
                {
                    _DataInput.ErrorMessage = $"El {Input.Email} ya esta registrado";
                    valor = false;//indicnado que este usuarioi no puede registrarse
                }
            }
            else
            {
                //objeto mosState capturar la informacion que suministrar el modelState
                foreach (var modelState in ModelState.Values)
                {
                    //para obtener la propiedad errors que contiene la coleccion de errores usando el modelState
                    foreach (var error in modelState.Errors)
                    {
                        //capturar todos los errores y se almacenaran el el Erros
                        _DataInput.ErrorMessage += error.ErrorMessage;
                    }
                }

                valor = false;
            }


            return(valor);
        }