From b2443079041e8211772f823fb3d4376fc5e207f6 Mon Sep 17 00:00:00 2001 From: "Dario F. Gomez Z" Date: Thu, 11 Apr 2024 06:51:05 -0500 Subject: [PATCH] Ajuste Usuarios --- .../Controllers/UsuariosController.cs | 199 ++++++++++++++++++ .../MsUsuarios/Dto/PerfilPermisosDTO.cs | 10 + .../MsUsuarios/Dto/UsuarioPerfilesDTO.cs | 10 + 3 files changed, 219 insertions(+) create mode 100644 Microservicios/MsUsuarios/Dto/PerfilPermisosDTO.cs create mode 100644 Microservicios/MsUsuarios/Dto/UsuarioPerfilesDTO.cs diff --git a/Microservicios/MsUsuarios/Controllers/UsuariosController.cs b/Microservicios/MsUsuarios/Controllers/UsuariosController.cs index bac410d..098c71c 100644 --- a/Microservicios/MsUsuarios/Controllers/UsuariosController.cs +++ b/Microservicios/MsUsuarios/Controllers/UsuariosController.cs @@ -13,6 +13,7 @@ using System.Threading.Channels; using MSAdminUsuarios.Dto.Externos.MsAgendaMedica; using static MSAdminUsuarios.Utils.RabbitMQService; using MSAdminUsuarios.Utils; +using Microsoft.EntityFrameworkCore.Storage; namespace MSAdminUsuarios.Controllers { @@ -536,6 +537,204 @@ namespace MSAdminUsuarios.Controllers } } + [HttpPost("UsuarioPerfiles")] + public async Task PostUsuarioPerfiles(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 = _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; + + _context.USUARIOSMs.Update(existe); + _context.SaveChanges(); + + /* + "perfiles": [ + { + "nU_PK_PFLXUSU": 0, + "nU_FK_PFL": 81, + "bL_ESTADO_PFLXUSU": 1, + "tX_UUID_PFL": "78428e6f-1eeb-4b1c-a3c7-b95a9350d568" + } + ] + }*/ + } + + + + /*if (existe_login > 0) + { + _errorModel.error = true; + _errorModel.cuerpo.Add($"El login \"{nuevo.usuario.TX_LOGINNAME_USUMS}\" ya está en uso"); + return Conflict(_errorModel); + }*/ + + /*if (nuevo.usuario.TX_PKDOC_USUMS == null) + { + var ult = _context.USUARIOSMs.Max(x => x.NU_PK_USUMS) + 1; + nuevo.usuario.TX_PKDOC_USUMS = ult.ToString(); + }*/ + + + + // 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) + { + 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 == nuevo.usuario.TX_UUID_USUMS).ToList(); + + foreach (var cu in existe_plfxusu) + { + cu.BL_ESTADO_PFLXUSU = 0; + _context.PERFILESPORUSUARIOs.Update(cu); + await _context.SaveChangesAsync(); + } + + 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); + await _context.SaveChangesAsync(); + continue; + } + else + { + if (pxu == null) + { + _errorModel.error = true; + _errorModel.cuerpo.Add($"Perfil por usuario #{count} sin valores"); + continue; + } + + pxu.BL_ESTADO_PFLXUSU = 1; + pxu.TX_UUID_USUMS = nuevo.usuario.TX_UUID_USUMS; + _context.PERFILESPORUSUARIOs.Add(pxu); + await _context.SaveChangesAsync(); + } + } + + 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(_errorModel); + } + catch (Exception e) + { + transaccion.RollbackToSavepoint("InicioCreacionUsuarioPerfiles"); + return BadRequest(e.Message); + } + } + } + } } diff --git a/Microservicios/MsUsuarios/Dto/PerfilPermisosDTO.cs b/Microservicios/MsUsuarios/Dto/PerfilPermisosDTO.cs new file mode 100644 index 0000000..b7146eb --- /dev/null +++ b/Microservicios/MsUsuarios/Dto/PerfilPermisosDTO.cs @@ -0,0 +1,10 @@ +using MSAdminUsuarios.Context; + +namespace MSAdminUsuarios.Dto +{ + public class PerfilPermisosDTO + { + public PERFIL? perfil { get; set; } + public PERMISO[]? permisos { get; set; } + } +} diff --git a/Microservicios/MsUsuarios/Dto/UsuarioPerfilesDTO.cs b/Microservicios/MsUsuarios/Dto/UsuarioPerfilesDTO.cs new file mode 100644 index 0000000..7d65f2a --- /dev/null +++ b/Microservicios/MsUsuarios/Dto/UsuarioPerfilesDTO.cs @@ -0,0 +1,10 @@ +using MSAdminUsuarios.Context; + +namespace MSAdminUsuarios.Dto +{ + public class UsuarioPerfilesDTO + { + public USUARIO? usuario { get; set; } + public PERFILPORUSUARIO[]? perfiles { get; set; } + } +}