From dbedd168209bc7372f1ef1bda91523b3f1ff1303 Mon Sep 17 00:00:00 2001 From: Cristian Guerrero Date: Mon, 23 Sep 2024 08:54:57 -0500 Subject: [PATCH] Ajuste de temporales --- ApiGateway/CustomLogic.cs | 1 + Microservicios/MsUsuarios/Context/USUARIO.cs | 1 + .../MsUsuarios/Context/USUARIOSTEMP.cs | 1 + .../MsUsuarios/Controllers/AuthController.cs | 134 ++++++- .../Controllers/UsuariosController.cs | 1 + .../Controllers/UsuariosTempController.cs | 360 +++++++++++++++++- 6 files changed, 491 insertions(+), 7 deletions(-) diff --git a/ApiGateway/CustomLogic.cs b/ApiGateway/CustomLogic.cs index 86373bc..2ef925f 100644 --- a/ApiGateway/CustomLogic.cs +++ b/ApiGateway/CustomLogic.cs @@ -46,6 +46,7 @@ namespace ApiGateway String.Equals(calledUrl, "/UsuariosTemp") || String.Equals(calledUrl, "/Auth/TknCambioClave") || String.Equals(calledUrl, "/Auth/Proveedor") || + String.Equals(calledUrl, "/Auth/RecuperarClave") || String.Equals(calledUrl, "/Email") || String.Equals(calledUrl, "/Formularios/Graficas/{rutaGrafica}") ) diff --git a/Microservicios/MsUsuarios/Context/USUARIO.cs b/Microservicios/MsUsuarios/Context/USUARIO.cs index 497da00..093aa04 100644 --- a/Microservicios/MsUsuarios/Context/USUARIO.cs +++ b/Microservicios/MsUsuarios/Context/USUARIO.cs @@ -37,6 +37,7 @@ namespace MSAdminUsuarios.Context public int? NU_INICIO_PRIMERAVEZ_USUMS { get; set; } public DateTime? FE_INICIOACTIVACION_USUTMP { get; set; } public DateTime? FE_FINACTIVACION_USUTMP { get; set; } + public DateTime? FE_RECUPERACLAVE { get; set; } } } diff --git a/Microservicios/MsUsuarios/Context/USUARIOSTEMP.cs b/Microservicios/MsUsuarios/Context/USUARIOSTEMP.cs index 1c1eaef..ef9f461 100644 --- a/Microservicios/MsUsuarios/Context/USUARIOSTEMP.cs +++ b/Microservicios/MsUsuarios/Context/USUARIOSTEMP.cs @@ -18,5 +18,6 @@ namespace MSAdminUsuarios.Context public int? NU_ESTADO_USUMS { get; set; } public DateTime? FE_INICIOACTIVACION_USUTMP { get; set; } public DateTime? FE_FINACTIVACION_USUTMP { get; set; } + public string? TX_UUID_USUMS { get; set; } } } diff --git a/Microservicios/MsUsuarios/Controllers/AuthController.cs b/Microservicios/MsUsuarios/Controllers/AuthController.cs index df9a07f..66f56cb 100644 --- a/Microservicios/MsUsuarios/Controllers/AuthController.cs +++ b/Microservicios/MsUsuarios/Controllers/AuthController.cs @@ -18,6 +18,7 @@ namespace MSAdminUsuarios.Controllers private readonly ModelContext _context; private readonly Encripter _encript = new(); private readonly LDAP _ldap; + private readonly ILogger _logger; public AuthController(ModelContext context) { @@ -28,7 +29,7 @@ namespace MSAdminUsuarios.Controllers }); var logger = loggerFactory.CreateLogger(); - + _logger = loggerFactory.CreateLogger(); _ldap = new LDAP(logger); } @@ -146,11 +147,70 @@ namespace MSAdminUsuarios.Controllers USUARIO? user = _context.USUARIOSMs.FirstOrDefault(u => u.TX_LOGINNAME_USUMS == login.TX_LOGINNAME_USUMS && u.TX_PASSWORD_USUMS == _encript.EncryptPwd(login.TX_PASSWORD_USUMS)); if (user == null) return BadRequest(new ResLoginExt("Usuario o contraseña incorrectos", true, userExist.NU_ESTADO_USUMS)); - if (user.NU_ESTADO_USUMS != 1) return BadRequest(new ResLoginExt("Usuario inactivo, bloqueado o eliminado.", true, user.NU_ESTADO_USUMS)); + //if (user.NU_ESTADO_USUMS == null) return BadRequest(new ResLoginExt("Usuario eliminado.", true, user.NU_ESTADO_USUMS)); + if (user.NU_ESTADO_USUMS == 0) return BadRequest(new ResLoginExt("Usuario inactivo.", true, user.NU_ESTADO_USUMS)); + if (user.NU_ESTADO_USUMS == 2) return BadRequest(new ResLoginExt("Usuario bloqueado.", true, user.NU_ESTADO_USUMS)); if (user.BL_VIENELDAP_USUMS != 0) return BadRequest(new ResLoginExt("No eres un usuario externo.", true, user.NU_ESTADO_USUMS)); + //if (user.FE_RECUPERACLAVE < DateTime.Now) return BadRequest(new ResLoginExt("La recuperación de contraseña esta caducada.", true, user.NU_ESTADO_USUMS)); + + //string fechaConvertidaBase = user.FE_RECUPERACLAVE.ToString("dd/MM/yy"); + if (user.FE_RECUPERACLAVE != null) + { + DateTime fecha1 = (DateTime)user.FE_RECUPERACLAVE; + DateTime fecha2 = DateTime.Now; + TimeSpan diferencia = fecha2 - fecha1; + if (diferencia.TotalHours > 24) + { + //Console.WriteLine("La diferencia es de al menos 24 horas."); + return BadRequest(new ResLoginExt("La recuperación de contraseña esta caducada.", true, user.NU_ESTADO_USUMS)); + } + } + //else + //{ + // Console.WriteLine("La diferencia es menor a 24 horas."); + //} + + //string fechaConvertidaBase = user.FE_RECUPERACLAVE.HasValue? user.FE_RECUPERACLAVE.Value.ToString("dd/MM/yy"): "Fecha no disponible"; + //string fechaConvertidaActual = DateTime.Now.ToString("dd/MM/yy"); + + //if (fechaConvertidaBase != null && fechaConvertidaBase != fechaConvertidaActual) return BadRequest(new ResLoginExt("La recuperación de contraseña esta caducada.", true, user.NU_ESTADO_USUMS)); + + //this._logger.LogWarning(user.FE_RECUPERACLAVE.ToString()); + //DateTime fecha1 = user.FE_RECUPERACLAVE; + + //if (fechaConvertidaBase != null && fechaConvertidaBase != fechaConvertidaActual) return BadRequest(new ResLoginExt("La recuperación de contraseña esta caducada.", true, user.NU_ESTADO_USUMS)); + + //if (user.FE_RECUPERACLAVE != null) { + // /////////////////////////////////////////////////////// + // DateTime fechaHoy = DateTime.Now; + // int diaDiasAntes = fechaHoy.Day; + // int mesDiasAntes = fechaHoy.Month; + // int anioDiasAntes = fechaHoy.Year; + // int horas = fechaHoy.Hour; + // int minutos = fechaHoy.Minute; + // int segundos = fechaHoy.Second; + // int milisegs = fechaHoy.Millisecond; + // /////////////////////////////////////////////////////// + // int dia = user.FE_RECUPERACLAVE.Value.Day; + // int mes = user.FE_RECUPERACLAVE.Value.Month; + // int año = user.FE_RECUPERACLAVE.Value.Year; + // int horasSEG = user.FE_RECUPERACLAVE.Value.Hour; + // int minutosSEG = user.FE_RECUPERACLAVE.Value.Minute; + // int segundosSEG = user.FE_RECUPERACLAVE.Value.Second; + // int milisegsSEG = user.FE_RECUPERACLAVE.Value.Millisecond; + + // if (user.FE_RECUPERACLAVE < DateTime.Now) return BadRequest(new ResLoginExt("La recuperación de contraseña esta caducada.", true, user.NU_ESTADO_USUMS)); + //} + //else + //{ + + //} string token = Token(user); + user.FE_RECUPERACLAVE = null; + _context.USUARIOSMs.Update(user); + _context.SaveChanges(); return Ok(new ResLoginExt("Bienvenido al sistema.", true, user.NU_ESTADO_USUMS, token, user.NU_INICIO_PRIMERAVEZ_USUMS, user.TX_PKDOC_USUMS, user.BL_VIENELDAP_USUMS)); @@ -162,6 +222,37 @@ namespace MSAdminUsuarios.Controllers } + [HttpPost("RecuperarClave")] + public IActionResult RecuperarClave([FromBody] string usuario) + { + try + { + if (usuario == null) throw new Exception("Usuario no encontrado"); + + if (usuario == null) return BadRequest(new ResLoginExt("Es necesario ingresar un usuario")); + + USUARIO? userExist = _context.USUARIOSMs.FirstOrDefault(u => u.TX_LOGINNAME_USUMS == usuario); + if (userExist == null) return BadRequest(new ResLoginExt("Este usuario no existe")); + if (userExist.NU_ESTADO_USUMS == 0) return BadRequest(new ResLoginExt("Usuario inactivo.", true, userExist.NU_ESTADO_USUMS)); + if (userExist.NU_ESTADO_USUMS == 2) return BadRequest(new ResLoginExt("Usuario bloqueado.", true, userExist.NU_ESTADO_USUMS)); + if (userExist.BL_VIENELDAP_USUMS != 0) return BadRequest(new ResLoginExt("No es un usuario externo.", true, userExist.NU_ESTADO_USUMS)); + //string token = Token(user); + userExist.FE_RECUPERACLAVE = DateTime.Now; + + string RecuperaIdGenerada = AuthController.RecuperaIdGenerada(8); + userExist.TX_PASSWORD_USUMS = _encript.EncryptPwd(RecuperaIdGenerada); + + _context.USUARIOSMs.Update(userExist); + _context.SaveChanges(); + + return Ok(new RecuperarClaveModel("Se enviará un correo para continuar el proceso.", true, userExist.NU_ESTADO_USUMS, userExist.TX_CORREO_USUMS, RecuperaIdGenerada)); + } + catch (Exception e) + { + return BadRequest(e.Message); + } + } + [HttpPatch("RenovarToken")] public IActionResult RefreshToken([FromBody] string token) { @@ -407,6 +498,27 @@ namespace MSAdminUsuarios.Controllers return Encripter.Cypher(token); } + public static string RecuperaIdGenerada(int length) + { + // Validar que la longitud sea positiva + if (length <= 0) + { + throw new ArgumentException("La longitud debe ser mayor que 0."); + } + + // Crear una instancia de Random + Random random = new Random(); + + // Generar una cadena aleatoria de números + string result = ""; + for (int i = 0; i < length; i++) + { + result += random.Next(0, 10).ToString(); // Generar un dígito aleatorio + } + + return result; + } + } public class LoginModel @@ -429,6 +541,7 @@ namespace MSAdminUsuarios.Controllers Primera = _primera; User = _user; Ldap = _ldap; + //ClaveRec = _claveRec; } public bool Existe { get; set; } @@ -440,6 +553,23 @@ namespace MSAdminUsuarios.Controllers public int? Ldap { get; set; } } + public class RecuperarClaveModel + { + public RecuperarClaveModel(string _message, bool _exist = false, int? _estado = null, string? _correo = "", string? _claveRec = "") + { + Message = _message; + Existe = _exist; + Estado = _estado; + Correo = _correo; + ClaveRec = _claveRec; + } + public bool Existe { get; set; } + public int? Estado { get; set; } + public string Message { get; set; } = null!; + public string Correo { get; set; } + public string ClaveRec { get; set; } + } + public class CambiarClaveModel { public string User { get; set; } diff --git a/Microservicios/MsUsuarios/Controllers/UsuariosController.cs b/Microservicios/MsUsuarios/Controllers/UsuariosController.cs index f75799f..b530064 100644 --- a/Microservicios/MsUsuarios/Controllers/UsuariosController.cs +++ b/Microservicios/MsUsuarios/Controllers/UsuariosController.cs @@ -266,6 +266,7 @@ namespace MSAdminUsuarios.Controllers return Conflict(_errorModel); } + existe.NU_ESTADO_USUMS = editado.NU_ESTADO_USUMS; existe.TX_PRIMERNOM_USUMS = editado.TX_PRIMERNOM_USUMS; existe.TX_SEGUNDONOM_USUMS = editado.TX_SEGUNDONOM_USUMS; existe.TX_PRIMERAPELL_USUMS = editado.TX_PRIMERAPELL_USUMS; diff --git a/Microservicios/MsUsuarios/Controllers/UsuariosTempController.cs b/Microservicios/MsUsuarios/Controllers/UsuariosTempController.cs index 3c50fdd..8b10aa4 100644 --- a/Microservicios/MsUsuarios/Controllers/UsuariosTempController.cs +++ b/Microservicios/MsUsuarios/Controllers/UsuariosTempController.cs @@ -2,7 +2,9 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using MSAdminUsuarios.Context; +using MSAdminUsuarios.Dto; using MSAdminUsuarios.Models; +using Security; namespace MSAdminUsuarios.Controllers { @@ -13,6 +15,7 @@ namespace MSAdminUsuarios.Controllers private readonly ModelContext _context; private readonly ILogger _logger; private ErrorModel _errorModel; + private readonly Encripter _encript = new(); public UsuariosTempController(ModelContext context, ILogger logger) { @@ -52,12 +55,97 @@ namespace MSAdminUsuarios.Controllers return Conflict(_errorModel); } - _context.USUARIOSTEMP.Add(nuevo); - await _context.SaveChangesAsync(); + //USUARIOSTEMP? existe = await _context.USUARIOSTEMP.FirstOrDefaultAsync(ut => ut.NU_PK_USUTMP == nuevo.NU_PK_USUTMP); + //if (existe == null) - _errorModel.error = false; - _errorModel.cuerpo.Add("Solicitud de usuario temporal guardado correctamente."); - return Ok(_errorModel); + if (nuevo.TX_UUID_USUMS == null) + { + USUARIOSTEMP? existeEmailTemp = await _context.USUARIOSTEMP.FirstOrDefaultAsync(ut => ut.TX_CORREO_USUMS == nuevo.TX_CORREO_USUMS); + if (existeEmailTemp != null) + { + if (existeEmailTemp.NU_ESTADO_USUMS == 0) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Ya existe un usuario inactivo con ese correo electronico."); + return Conflict(_errorModel); + } + else + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Ya existe un usuario activo con ese correo electronico."); + return Conflict(_errorModel); + } + } + + USUARIOSTEMP? existe = await _context.USUARIOSTEMP.FirstOrDefaultAsync(ut => ut.NU_TIPODOC_USUMS == nuevo.NU_TIPODOC_USUMS && ut.TX_PKDOC_USUMS == nuevo.TX_PKDOC_USUMS); + if (existe != null) { + if (existe.NU_ESTADO_USUMS == 0) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Ya existe un usuario inactivo con ese número de documento."); + return Conflict(_errorModel); + } + else + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Ya existe un usuario activo con ese número de documento."); + return Conflict(_errorModel); + } + } + else + { + Guid uuid = Guid.NewGuid(); + var UUID = uuid.ToString(); + nuevo.TX_UUID_USUMS = UUID; + + _context.USUARIOSTEMP.Add(nuevo); + await _context.SaveChangesAsync(); + + _errorModel.error = false; + _errorModel.cuerpo.Add("Solicitud de usuario temporal creada correctamente."); + return Ok(_errorModel); + } + } + else + { + USUARIOSTEMP? existe = _context.USUARIOSTEMP.FirstOrDefault(ut => ut.TX_UUID_USUMS == nuevo.TX_UUID_USUMS); + if (existe == null) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Sin usuario no existe."); + return Conflict(_errorModel); + } + + existe.NU_TIPODOC_USUMS = nuevo.NU_TIPODOC_USUMS; + existe.TX_PRIMERNOM_USUMS = nuevo.TX_PRIMERNOM_USUMS; + existe.TX_SEGUNDONOM_USUMS = nuevo.TX_SEGUNDONOM_USUMS; + existe.TX_PRIMERAPELL_USUMS = nuevo.TX_PRIMERAPELL_USUMS; + existe.TX_SEGUNDOAPELL_USUMS = nuevo.TX_SEGUNDOAPELL_USUMS; + //existe.TX_CELULAR_USUMS = nuevo.TX_CELULAR_USUMS; + existe.TX_TELEFONO_USUMS = nuevo.TX_TELEFONO_USUMS; + existe.TX_CORREO_USUMS = nuevo.TX_CORREO_USUMS; + //existe.TX_DIRECCION_USUMS = nuevo.TX_DIRECCION_USUMS; + //existe.BL_PERTENCEIPS_USUMS = nuevo.BL_PERTENCEIPS_USUMS; + existe.TX_NOMBRE_PVD = nuevo.TX_NOMBRE_PVD; + //existe.BL_VIENELDAP_USUMS = nuevo.BL_VIENELDAP_USUMS; + //existe.NU_GRUPO_USUMS = nuevo.NU_GRUPO_USUMS; + //existe.NU_CARGO_USUMS = nuevo.NU_CARGO_USUMS; + //existe.NU_MODALIDADCTT_USUMS = nuevo.NU_MODALIDADCTT_USUMS; + //existe.TX_SEDES_USUMS = nuevo.TX_SEDES_USUMS; + //existe.NU_BLOQUEO_USUMS = nuevo.NU_BLOQUEO_USUMS; + //existe.NU_TIPOUSUARIO_USUMS = nuevo.NU_TIPOUSUARIO_USUMS; + //existe.TX_REGPROF_MDC = nuevo.TX_REGPROF_MDC; + existe.NU_ESTADO_USUMS = 1; + existe.FE_INICIOACTIVACION_USUTMP = nuevo.FE_INICIOACTIVACION_USUTMP; + existe.FE_FINACTIVACION_USUTMP = nuevo.FE_FINACTIVACION_USUTMP; + + _context.USUARIOSTEMP.Update(existe); + await _context.SaveChangesAsync(); + + _errorModel.error = false; + _errorModel.cuerpo.Add("Solicitud de usuario temporal actualizada correctamente."); + return Ok(_errorModel); + } } catch (Exception) { @@ -102,5 +190,267 @@ namespace MSAdminUsuarios.Controllers return BadRequest(_errorModel); } } + + [HttpPost("UsuarioPerfilesTemp")] + public async Task PostUsuarioPerfilesTemp(UsuarioPerfilesDTO nuevo) + { + ErrorModel _errorModel = new ErrorModel(); + using (var transaccion = _context.Database.BeginTransaction()) + { + try + { + if (nuevo == null) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Sin datos a guardar."); + return Conflict(_errorModel); + } + + transaccion.CreateSavepoint("InicioCreacionUsuarioPerfiles"); + + if (nuevo.usuario == null) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Sin usuario a guardar."); + return Conflict(_errorModel); + } + + if (nuevo.usuario.TX_CORREO_USUMS == null && nuevo.usuario.TX_LOGINNAME_USUMS == null) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Indique algún correo."); + return Conflict(_errorModel); + } + + if (nuevo.usuario.TX_UUID_USUMS == null) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Temporal sin codigo."); + return Conflict(_errorModel); + } + else + { + USUARIO? existeUUID = _context.USUARIOSMs.FirstOrDefault(usu => usu.TX_UUID_USUMS == nuevo.usuario.TX_UUID_USUMS); + if (existeUUID == null) + { + USUARIO? existeEmail = await _context.USUARIOSMs.FirstOrDefaultAsync(usu => usu.TX_CORREO_USUMS == nuevo.usuario.TX_CORREO_USUMS); + if (existeEmail != null) + { + if (existeEmail.NU_ESTADO_USUMS == 0) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Ya existe un usuario inactivo con ese correo electronico."); + return Conflict(_errorModel); + } + else if (existeEmail.NU_ESTADO_USUMS == 1) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Ya existe un usuario activo con ese correo electronico."); + return Conflict(_errorModel); + } + else if (existeEmail.NU_ESTADO_USUMS == 2) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Ya existe un usuario bloqueado con ese correo electronico."); + return Conflict(_errorModel); + } + } + + USUARIO? existeDoc = await _context.USUARIOSMs.FirstOrDefaultAsync(usu => usu.NU_TIPODOC_USUMS == nuevo.usuario.NU_TIPODOC_USUMS && usu.TX_PKDOC_USUMS == nuevo.usuario.TX_PKDOC_USUMS); + if (existeDoc != null) + { + if (existeDoc.NU_ESTADO_USUMS == 0) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Ya existe un usuario inactivo con ese número de documento."); + return Conflict(_errorModel); + } + else if (existeDoc.NU_ESTADO_USUMS == 1) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Ya existe un usuario activo con ese número de documento."); + return Conflict(_errorModel); + } + else if (existeDoc.NU_ESTADO_USUMS == 2) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Ya existe un usuario activo con ese número de documento."); + return Conflict(_errorModel); + } + } + //_errorModel.error = true; + //_errorModel.cuerpo.Add("Sin usuario no existe."); + //return Conflict(_errorModel); + USUARIOSTEMP? existeTemp = _context.USUARIOSTEMP.FirstOrDefault(ut => ut.TX_PKDOC_USUMS == nuevo.usuario.TX_PKDOC_USUMS); + if (existeTemp != null) + { + if (nuevo.usuario.TX_PASSWORD_USUMS == null) + { + nuevo.usuario.TX_PASSWORD_USUMS = nuevo.usuario.TX_PKDOC_USUMS; + } + + if (nuevo.usuario.TX_PASSWORD_USUMS != null) + { + nuevo.usuario.TX_PASSWORD_USUMS = _encript.EncryptPwd(nuevo.usuario.TX_PASSWORD_USUMS); + } + + if (nuevo.usuario.TX_SEDES_USUMS == null || nuevo.usuario.TX_SEDES_USUMS.Length == 0) + { + nuevo.usuario.TX_SEDES_USUMS = "[0]"; + } + + nuevo.usuario.NU_INICIO_PRIMERAVEZ_USUMS = 0; + nuevo.usuario.BL_VIENELDAP_USUMS = 0; + nuevo.usuario.TX_UUID_USUMS = existeTemp.TX_UUID_USUMS; + nuevo.usuario.TX_LOGINNAME_USUMS = nuevo.usuario.TX_CORREO_USUMS; + //nuevo.usuario.TX_PASSWORD_USUMS = _encript.EncryptPwd(nuevo.usuario.TX_PKDOC_USUMS!); + + //if (nuevo.usuario.TX_PASSWORD_USUMS == null || nuevo.usuario.TX_PASSWORD_USUMS == "") + //{ + // nuevo.usuario.TX_PASSWORD_USUMS = _encript.EncryptPwd(nuevo.usuario.TX_PKDOC_USUMS!); + //} + + _context.USUARIOSMs.Add(nuevo.usuario); + await _context.SaveChangesAsync(); + //_errorModel.cuerpo.Add("Usuario Temporal creado correctamente"); + } + } + else + { + USUARIO? existeEmail = await _context.USUARIOSMs.FirstOrDefaultAsync(usu => usu.TX_CORREO_USUMS == nuevo.usuario.TX_CORREO_USUMS && usu.TX_UUID_USUMS != nuevo.usuario.TX_UUID_USUMS); + if (existeEmail != null) + { + if (existeEmail.NU_ESTADO_USUMS == 0) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Ya existe un usuario inactivo con ese correo electronico."); + return Conflict(_errorModel); + } + else if (existeEmail.NU_ESTADO_USUMS == 1) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Ya existe un usuario activo con ese correo electronico."); + return Conflict(_errorModel); + } + else if (existeEmail.NU_ESTADO_USUMS == 2) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Ya existe un usuario bloqueado con ese correo electronico."); + return Conflict(_errorModel); + } + } + + USUARIO? existeDoc = await _context.USUARIOSMs.FirstOrDefaultAsync(usu => usu.NU_TIPODOC_USUMS == nuevo.usuario.NU_TIPODOC_USUMS && usu.TX_PKDOC_USUMS == nuevo.usuario.TX_PKDOC_USUMS && usu.TX_UUID_USUMS != nuevo.usuario.TX_UUID_USUMS); + if (existeDoc != null) + { + if (existeDoc.NU_ESTADO_USUMS == 0) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Ya existe un usuario inactivo con ese número de documento."); + return Conflict(_errorModel); + } + else if (existeDoc.NU_ESTADO_USUMS == 1) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Ya existe un usuario activo con ese número de documento."); + return Conflict(_errorModel); + } + else if (existeDoc.NU_ESTADO_USUMS == 2) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Ya existe un usuario activo con ese número de documento."); + return Conflict(_errorModel); + } + } + + existeUUID.NU_TIPODOC_USUMS = nuevo.usuario.NU_TIPODOC_USUMS; + existeUUID.TX_PRIMERNOM_USUMS = nuevo.usuario.TX_PRIMERNOM_USUMS; + existeUUID.TX_SEGUNDONOM_USUMS = nuevo.usuario.TX_SEGUNDONOM_USUMS; + existeUUID.TX_PRIMERAPELL_USUMS = nuevo.usuario.TX_PRIMERAPELL_USUMS; + existeUUID.TX_SEGUNDOAPELL_USUMS = nuevo.usuario.TX_SEGUNDOAPELL_USUMS; + //existeUUID.TX_CELULAR_USUMS = nuevo.usuario.TX_CELULAR_USUMS; + existeUUID.TX_TELEFONO_USUMS = nuevo.usuario.TX_TELEFONO_USUMS; + existeUUID.TX_CORREO_USUMS = nuevo.usuario.TX_CORREO_USUMS; + //existeUUID.TX_DIRECCION_USUMS = nuevo.usuario.TX_DIRECCION_USUMS; + //existeUUID.BL_PERTENCEIPS_USUMS = nuevo.usuario.BL_PERTENCEIPS_USUMS; + existeUUID.TX_NOMBRE_PVD = nuevo.usuario.TX_NOMBRE_PVD; + //existeUUID.BL_VIENELDAP_USUMS = nuevo.usuario.BL_VIENELDAP_USUMS; + //existeUUID.NU_GRUPO_USUMS = nuevo.usuario.NU_GRUPO_USUMS; + //existeUUID.NU_CARGO_USUMS = nuevo.usuario.NU_CARGO_USUMS; + //existeUUID.NU_MODALIDADCTT_USUMS = nuevo.usuario.NU_MODALIDADCTT_USUMS; + //existeUUID.TX_SEDES_USUMS = nuevo.usuario.TX_SEDES_USUMS; + //existeUUID.NU_BLOQUEO_USUMS = nuevo.usuario.NU_BLOQUEO_USUMS; + //existeUUID.NU_TIPOUSUARIO_USUMS = nuevo.usuario.NU_TIPOUSUARIO_USUMS; + //existeUUID.TX_REGPROF_MDC = nuevo.usuario.TX_REGPROF_MDC; + existeUUID.NU_ESTADO_USUMS = nuevo.usuario.NU_ESTADO_USUMS; + existeUUID.FE_INICIOACTIVACION_USUTMP = nuevo.usuario.FE_INICIOACTIVACION_USUTMP; + existeUUID.FE_FINACTIVACION_USUTMP = nuevo.usuario.FE_FINACTIVACION_USUTMP; + + if (existeUUID.TX_PASSWORD_USUMS == null || existeUUID.TX_PASSWORD_USUMS == "") + { + existeUUID.TX_PASSWORD_USUMS = _encript.EncryptPwd(nuevo.usuario.TX_PKDOC_USUMS!); + } + + _context.USUARIOSMs.Update(existeUUID); + await _context.SaveChangesAsync(); + //_errorModel.cuerpo.Add("Usuario Temporal Actualizado correctamente"); + } + } + + USUARIO? creado = await _context.USUARIOSMs.FirstOrDefaultAsync(us => us.TX_UUID_USUMS == nuevo.usuario.TX_UUID_USUMS); + + if (nuevo.perfiles != null && creado != null) + { + // Se cambia a estado 0 todos los perfiles por usuario existentes + var existe_plfxusu = _context.PERFILESPORUSUARIOs.Where(x => x.BL_ESTADO_PFLXUSU == 1 && x.TX_UUID_USUMS == creado.TX_UUID_USUMS).ToList(); + + foreach (var pu in existe_plfxusu) + { + pu.BL_ESTADO_PFLXUSU = 0; + } + _context.PERFILESPORUSUARIOs.UpdateRange(existe_plfxusu); + await _context.SaveChangesAsync(); + + foreach (PERFILPORUSUARIO pxu in nuevo.perfiles) + { + if (pxu != null) + { + PERFILPORUSUARIO? existe = _context.PERFILESPORUSUARIOs.FirstOrDefault(pu => pu.TX_UUID_PFL == pxu.TX_UUID_PFL && pu.TX_UUID_USUMS == pxu.TX_UUID_USUMS); + if (existe != null) + { + existe.BL_ESTADO_PFLXUSU = 1; + _context.Update(existe); + await _context.SaveChangesAsync(); + } + else + { + pxu.BL_ESTADO_PFLXUSU = 1; + pxu.TX_UUID_USUMS = nuevo.usuario.TX_UUID_USUMS; + _context.PERFILESPORUSUARIOs.Add(pxu); + await _context.SaveChangesAsync(); + + } + } + } + + /*List perUsuEliminiado = _context.PERFILESPORUSUARIOs.Where(pu => pu.TX_UUID_USUMS == creado.TX_UUID_USUMS && pu.BL_ESTADO_PFLXUSU == 0).ToList(); + _context.PERFILESPORUSUARIOs.RemoveRange(perUsuEliminiado); + await _context.SaveChangesAsync();*/ + + } + + transaccion.Commit(); + + _errorModel.error = false; + _errorModel.cuerpo.Add("Proceso realizado correctamente"); + return Ok(_errorModel); + } + catch (Exception e) + { + transaccion.RollbackToSavepoint("InicioCreacionUsuarioPerfiles"); + return BadRequest(e.Message); + } + } + } } }