From e7e78fa51f9cdc23cc29713048596126f1a9c13f Mon Sep 17 00:00:00 2001 From: Adriana Franklin Date: Fri, 12 Jul 2024 17:39:56 -0500 Subject: [PATCH] [add] creo nuevo metodo para crear-editar usuarios con perfil para que retorne el usuario creado o editado --- .../Controllers/UsuariosController.cs | 187 ++++++++++++++++++ 1 file changed, 187 insertions(+) diff --git a/Microservicios/MsUsuarios/Controllers/UsuariosController.cs b/Microservicios/MsUsuarios/Controllers/UsuariosController.cs index 0f942ac..7e06219 100644 --- a/Microservicios/MsUsuarios/Controllers/UsuariosController.cs +++ b/Microservicios/MsUsuarios/Controllers/UsuariosController.cs @@ -728,6 +728,193 @@ namespace MSAdminUsuarios.Controllers } } + [HttpPost("UsuarioPerfilesRetorno")] + public async Task PostUsuarioPerfilesRetorno(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) + { + Guid uuid = Guid.NewGuid(); + var UUID = uuid.ToString(); + nuevo.usuario.TX_UUID_USUMS = UUID; + + 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]"; + } + + _context.USUARIOSMs.Add(nuevo.usuario); + await _context.SaveChangesAsync(); + + } + else + { + USUARIO? existe = _context.USUARIOSMs.FirstOrDefault(usu => usu.TX_UUID_USUMS == nuevo.usuario.TX_UUID_USUMS); + if (existe == null) + { + _errorModel.error = true; + _errorModel.cuerpo.Add("Sin usuario no existe."); + return Conflict(_errorModel); + } + + existe.NU_TIPODOC_USUMS = nuevo.usuario.NU_TIPODOC_USUMS; + existe.TX_PRIMERNOM_USUMS = nuevo.usuario.TX_PRIMERNOM_USUMS; + existe.TX_SEGUNDONOM_USUMS = nuevo.usuario.TX_SEGUNDONOM_USUMS; + existe.TX_PRIMERAPELL_USUMS = nuevo.usuario.TX_PRIMERAPELL_USUMS; + existe.TX_SEGUNDOAPELL_USUMS = nuevo.usuario.TX_SEGUNDOAPELL_USUMS; + existe.TX_CELULAR_USUMS = nuevo.usuario.TX_CELULAR_USUMS; + existe.TX_TELEFONO_USUMS = nuevo.usuario.TX_TELEFONO_USUMS; + existe.TX_CORREO_USUMS = nuevo.usuario.TX_CORREO_USUMS; + existe.TX_DIRECCION_USUMS = nuevo.usuario.TX_DIRECCION_USUMS; + existe.BL_PERTENCEIPS_USUMS = nuevo.usuario.BL_PERTENCEIPS_USUMS; + existe.TX_NOMBRE_PVD = nuevo.usuario.TX_NOMBRE_PVD; + existe.BL_VIENELDAP_USUMS = nuevo.usuario.BL_VIENELDAP_USUMS; + existe.NU_GRUPO_USUMS = nuevo.usuario.NU_GRUPO_USUMS; + existe.NU_CARGO_USUMS = nuevo.usuario.NU_CARGO_USUMS; + existe.NU_MODALIDADCTT_USUMS = nuevo.usuario.NU_MODALIDADCTT_USUMS; + existe.TX_SEDES_USUMS = nuevo.usuario.TX_SEDES_USUMS; + existe.NU_BLOQUEO_USUMS = nuevo.usuario.NU_BLOQUEO_USUMS; + existe.NU_TIPOUSUARIO_USUMS = nuevo.usuario.NU_TIPOUSUARIO_USUMS; + existe.TX_REGPROF_MDC = nuevo.usuario.TX_REGPROF_MDC; + + if (existe.TX_PASSWORD_USUMS == null || existe.TX_PASSWORD_USUMS == "") + { + existe.TX_PASSWORD_USUMS = _encript.EncryptPwd(nuevo.usuario.TX_PKDOC_USUMS!); + } + + _context.USUARIOSMs.Update(existe); + _context.SaveChanges(); + } + + // TODO: Validacion agregada mientras se aclara el proceso + + USUARIO? creado = await _context.USUARIOSMs.FirstOrDefaultAsync(us => us.TX_UUID_USUMS == nuevo.usuario.TX_UUID_USUMS); + + if (nuevo.perfiles != null && creado!=null) + { + var count = 0; + + // 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); + _context.SaveChanges(); + + foreach (var pxu in nuevo.perfiles) + { + count++; + //Se comprueba existencia de cada pxu en base de datos + /*var existe_pxu = (from dm in _context.PERFILESPORUSUARIOs + where dm.TX_UUID_PFL == pxu.TX_UUID_PFL + && dm.TX_UUID_USUMS == pxu.TX_UUID_USUMS + select dm).ToList();*/ + 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) + { + //Si existe activamos estado 1 del perfil + existe.BL_ESTADO_PFLXUSU = 1; + _context.Update(existe); + _context.SaveChanges(); + + } + else + { + if (pxu == null) + { + _errorModel.error = true; + _errorModel.cuerpo.Add($"Perfil por usuario #{count} sin valores"); + + } else + { + pxu.BL_ESTADO_PFLXUSU = 1; + pxu.TX_UUID_USUMS = nuevo.usuario.TX_UUID_USUMS; + _context.PERFILESPORUSUARIOs.Add(pxu); + _context.SaveChanges(); + + } + + } + } + List perUsuEliminiado = _context.PERFILESPORUSUARIOs.Where(pu => pu.TX_UUID_USUMS == creado.TX_UUID_USUMS && pu.BL_ESTADO_PFLXUSU == 0).ToList(); + _context.PERFILESPORUSUARIOs.RemoveRange(perUsuEliminiado); + _context.SaveChanges(); + + + List all = new List(); + + all.Add($"Total registros: {nuevo.perfiles.Count().ToString()}"); + all.Add($"Exitosos: {(nuevo.perfiles.Count() - _errorModel.cuerpo.Count()).ToString()}"); + all.Add($"Erroneos: {_errorModel.cuerpo.Count().ToString()}"); + + var flag_r = 0; + foreach (var r in _errorModel.cuerpo) + { + flag_r++; + all.Add($"Error #{flag_r}: {r}"); + } + + if (_errorModel.cuerpo.Count() > 0) + { + return Conflict(all.ToList()); + } + } + + transaccion.Commit(); + + _errorModel.error = false; + _errorModel.cuerpo.Add("Usuario creado correctamente"); + return Ok(creado); + } + catch (Exception e) + { + transaccion.RollbackToSavepoint("InicioCreacionUsuarioPerfiles"); + return BadRequest(e.Message); + } + } + } + } }