diff --git a/Microservicios/MsUsuarios/Controllers/PerfilesPorUsuarioController.cs b/Microservicios/MsUsuarios/Controllers/PerfilesPorUsuarioController.cs index b88d670..ddc6380 100644 --- a/Microservicios/MsUsuarios/Controllers/PerfilesPorUsuarioController.cs +++ b/Microservicios/MsUsuarios/Controllers/PerfilesPorUsuarioController.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Transactions; +using Microsoft.EntityFrameworkCore.Storage; namespace MSAdminUsuarios.Controllers { @@ -14,6 +15,10 @@ namespace MSAdminUsuarios.Controllers { private readonly ModelContext _context; + //public PerfilesPorUsuarioController() + //{ + //} + public PerfilesPorUsuarioController(ModelContext context) { _context = context; @@ -39,86 +44,108 @@ namespace MSAdminUsuarios.Controllers [HttpPost] public async Task GuardarPerfilesPorUsuario(PERFILPORUSUARIO[] guardar) { - using (var dbContextTransaction = _context.Database.BeginTransaction()) + using var dbContextTransaction = _context.Database.BeginTransaction(); + //List error = new List(); //Inicializamos variable para guardar errores + try { - List error = new List(); //Inicializamos variable para guardar errores - var count = 0; - try + // + + var error = await GuardarPerfiles(guardar, _context); + + dbContextTransaction.Commit(); + + List all = new List(); + + all.Add($"Total registros: {guardar.Count().ToString()}"); + all.Add($"Exitosos: {(guardar.Count() - error.Count()).ToString()}"); + all.Add($"Erroneos: {error.Count().ToString()}"); + + var flag_r = 0; + foreach (var r in error) { - // 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_FKDOC_USUMS == guardar[0].TX_FKDOC_USUMS).ToList(); - - foreach (var cu in existe_plfxusu) - { - cu.BL_ESTADO_PFLXUSU = 0; - _context.PERFILESPORUSUARIOs.Update(cu); - await _context.SaveChangesAsync(); - } - - - - foreach (var pxu in guardar) - { - count++; - //Se comprueba existencia de cada pxu en base de datos - var existe_pxu = (from dm in _context.PERFILESPORUSUARIOs - where dm.NU_FK_PFL == pxu.NU_FK_PFL - && dm.TX_FKDOC_USUMS == pxu.TX_FKDOC_USUMS - select dm).ToList(); - - if(existe_pxu.Count() > 0) - { - //Si existe activamos estado 1 del perfil - existe_pxu[0].BL_ESTADO_PFLXUSU = 1; - _context.Update(existe_pxu[0]); - await _context.SaveChangesAsync(); - continue; - } - else - { - if (pxu == null) - { - error.Add($"Perfil por usuario #{count} sin valores"); - continue; - } - - pxu.BL_ESTADO_PFLXUSU = 1; - _context.PERFILESPORUSUARIOs.Add(pxu); - await _context.SaveChangesAsync(); - } - } - - dbContextTransaction.Commit(); - - List all = new List(); - - all.Add($"Total registros: {guardar.Count().ToString()}"); - all.Add($"Exitosos: {(guardar.Count() - error.Count()).ToString()}"); - all.Add($"Erroneos: {error.Count().ToString()}"); - - var flag_r = 0; - foreach (var r in error) - { - flag_r++; - all.Add($"Error #{flag_r}: {r}"); - } - - if (error.Count() > 0) - { - return Conflict(all.ToList()); - } - return Ok(); - } - catch (Exception ex) - { - //hacemos rollback si hay excepción - dbContextTransaction.Rollback(); - return BadRequest(ex.Message); + flag_r++; + all.Add($"Error #{flag_r}: {r}"); } + if (error.Count() > 0) + { + return Conflict(all.ToList()); + } + return Ok(); + } + catch (Exception ex) + { + //hacemos rollback si hay excepción + dbContextTransaction.Rollback(); + return BadRequest(ex.Message); } } + [ApiExplorerSettings(IgnoreApi = true)] + [NonAction] + public async Task> GuardarPerfiles(PERFILPORUSUARIO[] guardar, ModelContext context) + { + //using var transactionScope = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromSeconds(60)); + try + { + List error = new(); //Inicializamos variable para guardar errores + 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_FKDOC_USUMS == guardar[0].TX_FKDOC_USUMS).ToList(); + + foreach (var cu in existe_plfxusu) + { + cu.BL_ESTADO_PFLXUSU = 0; + context.PERFILESPORUSUARIOs.Update(cu); + await context.SaveChangesAsync(); + } + + foreach (var pxu in guardar) + { + count++; + //Se comprueba existencia de cada pxu en base de datos + var existe_pxu = (from dm in context.PERFILESPORUSUARIOs + where dm.NU_FK_PFL == pxu.NU_FK_PFL + && dm.TX_FKDOC_USUMS == pxu.TX_FKDOC_USUMS + select dm).ToList(); + + if (existe_pxu.Count() > 0) + { + //Si existe activamos estado 1 del perfil + existe_pxu[0].BL_ESTADO_PFLXUSU = 1; + context.Update(existe_pxu[0]); + await context.SaveChangesAsync(); + continue; + } + else + { + if (pxu == null) + { + error.Add($"Perfil por usuario #{count} sin valores"); + continue; + } + + pxu.BL_ESTADO_PFLXUSU = 1; + context.PERFILESPORUSUARIOs.Add(pxu); + await context.SaveChangesAsync(); + } + } + //transactionScope.Complete(); + return error; + + } + catch (Exception) + { + //transactionScope.Dispose(); + throw; + } + + } + + + + } } diff --git a/Microservicios/MsUsuarios/Controllers/UsuariosController.cs b/Microservicios/MsUsuarios/Controllers/UsuariosController.cs index d9de53d..38590e5 100644 --- a/Microservicios/MsUsuarios/Controllers/UsuariosController.cs +++ b/Microservicios/MsUsuarios/Controllers/UsuariosController.cs @@ -5,6 +5,8 @@ using Security; using MSAdminUsuarios.Models; using Microsoft.AspNetCore.Components.Forms; using Microsoft.EntityFrameworkCore; +using System.Linq; +using Microsoft.IdentityModel.Tokens; namespace MSAdminUsuarios.Controllers { @@ -20,6 +22,31 @@ namespace MSAdminUsuarios.Controllers _context = context; } + [HttpPost] + [Route("integrante-user")] + public async Task DoAction() + { + // Get the "X-Specific-Header" header from the request + var specificHeader = Request.Headers.FirstOrDefault(h => h.Key == "Potato").Value; + var specificHeader2 = Request.Headers.FirstOrDefault(h => h.Key == "Potato2").Value; + + if (String.IsNullOrEmpty(specificHeader)) + { + return BadRequest("null"); + } + + if (!specificHeader.Contains("true")) + { + // Return an error response + return BadRequest("Invalid header"); + } + else + { + // Perform the action + return Ok("Action performed successfully"); + } + } + [HttpPost("UserBene")] public async Task PostUserBeneficiario(string TX_IDENTIFICACION_AFIL) { @@ -104,40 +131,73 @@ namespace MSAdminUsuarios.Controllers [HttpPost] public async Task GuardarUsuarios(USUARIO usuario) { - try + using (var dbContextTransaction = _context.Database.BeginTransaction()) { - if (usuario == null) return Conflict(); - - if (usuario.TX_CORREO_USUMS == null) return Conflict("Indique algún correo."); - - var login_name = usuario.TX_CORREO_USUMS.Split('@'); - - var existe_login = _context.USUARIOSMs.Where(x => x.TX_LOGINNAME_USUMS == login_name[0]).Count(); - - if (existe_login > 0) return Conflict("El login ya está en uso"); - - usuario.TX_LOGINNAME_USUMS = login_name[0]; - - if (usuario.TX_PKDOC_USUMS == null) + try { - var ult = _context.USUARIOSMs.Max(x => x.NU_PK_USUMS) + 1; - usuario.TX_PKDOC_USUMS = ult.ToString(); - } + if (usuario == null) return Conflict(); - if (usuario.TX_PASSWORD_USUMS != null) + if (usuario.TX_CORREO_USUMS == null) return Conflict("Indique algún correo."); + + var login_name = usuario.TX_CORREO_USUMS.Split('@'); + + var existe_login = _context.USUARIOSMs.Where(x => x.TX_LOGINNAME_USUMS == login_name[0]).Count(); + + if (existe_login > 0) return Conflict("El login ya está en uso"); + + usuario.TX_LOGINNAME_USUMS = login_name[0]; + + if (usuario.TX_PKDOC_USUMS == null) + { + var ult = _context.USUARIOSMs.Max(x => x.NU_PK_USUMS) + 1; + usuario.TX_PKDOC_USUMS = ult.ToString(); + } + + if (usuario.TX_PASSWORD_USUMS != null) + { + usuario.TX_PASSWORD_USUMS = _encript.EncryptPwd(usuario.TX_PASSWORD_USUMS); + } + + _context.USUARIOSMs.Add(usuario); + await _context.SaveChangesAsync(); + + // Perfil quemado de invitado cuando se crea un usuario desde Integrantes Comité + // Calidad (MsProgramacionComite) + var esIntegranteCTC = Request.Headers.FirstOrDefault(h => h.Key == "Comite").Value; + + if (String.IsNullOrEmpty(esIntegranteCTC) == false && esIntegranteCTC.Contains("true")) + { + usuario.NU_TIPODOC_USUMS = 0; + usuario.NU_ESTADO_USUMS = 1; + var perfil = new List + { + new PERFILPORUSUARIO() + { + NU_PK_PFLXUSU = -1, + NU_FK_PFL = 103, // QUEMADO! + BL_ESTADO_PFLXUSU = 1, + TX_FKDOC_USUMS = usuario.TX_PKDOC_USUMS + } + }; + + var ctrl = new PerfilesPorUsuarioController(_context); + var errors = await ctrl.GuardarPerfiles(perfil.ToArray(), _context); + + if(errors != null && errors.Count > 0) + { + throw new Exception(); + } + + } + + dbContextTransaction.Commit(); + return Ok(); + } + catch (Exception ex) { - usuario.TX_PASSWORD_USUMS = _encript.EncryptPwd(usuario.TX_PASSWORD_USUMS); + dbContextTransaction.Rollback(); + return BadRequest(ex.Message); } - - - - _context.USUARIOSMs.Add(usuario); - await _context.SaveChangesAsync(); - return Ok(); - } - catch (Exception ex) - { - return BadRequest(ex.Message); } }