Injección en usuarios para asignar perfil si es Integrante Comité

- Abstracción en PerfilesPorUsuario para permitir llamado interno
This commit is contained in:
Luis Martinez 2023-03-15 15:57:59 -05:00
parent de15c5e7be
commit 3a885a5677
2 changed files with 189 additions and 102 deletions

View File

@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.Data.SqlClient; using System.Data.SqlClient;
using System.Linq; using System.Linq;
using System.Transactions; using System.Transactions;
using Microsoft.EntityFrameworkCore.Storage;
namespace MSAdminUsuarios.Controllers namespace MSAdminUsuarios.Controllers
{ {
@ -14,6 +15,10 @@ namespace MSAdminUsuarios.Controllers
{ {
private readonly ModelContext _context; private readonly ModelContext _context;
//public PerfilesPorUsuarioController()
//{
//}
public PerfilesPorUsuarioController(ModelContext context) public PerfilesPorUsuarioController(ModelContext context)
{ {
_context = context; _context = context;
@ -39,54 +44,13 @@ namespace MSAdminUsuarios.Controllers
[HttpPost] [HttpPost]
public async Task<IActionResult> GuardarPerfilesPorUsuario(PERFILPORUSUARIO[] guardar) public async Task<IActionResult> GuardarPerfilesPorUsuario(PERFILPORUSUARIO[] guardar)
{ {
using (var dbContextTransaction = _context.Database.BeginTransaction()) using var dbContextTransaction = _context.Database.BeginTransaction();
{ //List<string> error = new List<string>(); //Inicializamos variable para guardar errores
List<string> error = new List<string>(); //Inicializamos variable para guardar errores
var count = 0;
try try
{ {
// 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) var error = await GuardarPerfiles(guardar, _context);
{
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(); dbContextTransaction.Commit();
@ -115,9 +79,72 @@ namespace MSAdminUsuarios.Controllers
dbContextTransaction.Rollback(); dbContextTransaction.Rollback();
return BadRequest(ex.Message); return BadRequest(ex.Message);
} }
}
}
} [ApiExplorerSettings(IgnoreApi = true)]
[NonAction]
public async Task<List<string>> GuardarPerfiles(PERFILPORUSUARIO[] guardar, ModelContext context)
{
//using var transactionScope = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromSeconds(60));
try
{
List<string> 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;
}
}
} }
} }

View File

@ -5,6 +5,8 @@ using Security;
using MSAdminUsuarios.Models; using MSAdminUsuarios.Models;
using Microsoft.AspNetCore.Components.Forms; using Microsoft.AspNetCore.Components.Forms;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System.Linq;
using Microsoft.IdentityModel.Tokens;
namespace MSAdminUsuarios.Controllers namespace MSAdminUsuarios.Controllers
{ {
@ -20,6 +22,31 @@ namespace MSAdminUsuarios.Controllers
_context = context; _context = context;
} }
[HttpPost]
[Route("integrante-user")]
public async Task<IActionResult> 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")] [HttpPost("UserBene")]
public async Task<IActionResult> PostUserBeneficiario(string TX_IDENTIFICACION_AFIL) public async Task<IActionResult> PostUserBeneficiario(string TX_IDENTIFICACION_AFIL)
{ {
@ -103,6 +130,8 @@ namespace MSAdminUsuarios.Controllers
[HttpPost] [HttpPost]
public async Task<IActionResult> GuardarUsuarios(USUARIO usuario) public async Task<IActionResult> GuardarUsuarios(USUARIO usuario)
{
using (var dbContextTransaction = _context.Database.BeginTransaction())
{ {
try try
{ {
@ -129,17 +158,48 @@ namespace MSAdminUsuarios.Controllers
usuario.TX_PASSWORD_USUMS = _encript.EncryptPwd(usuario.TX_PASSWORD_USUMS); usuario.TX_PASSWORD_USUMS = _encript.EncryptPwd(usuario.TX_PASSWORD_USUMS);
} }
_context.USUARIOSMs.Add(usuario); _context.USUARIOSMs.Add(usuario);
await _context.SaveChangesAsync(); 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<PERFILPORUSUARIO>
{
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(); return Ok();
} }
catch (Exception ex) catch (Exception ex)
{ {
dbContextTransaction.Rollback();
return BadRequest(ex.Message); return BadRequest(ex.Message);
} }
} }
}
[HttpPatch] [HttpPatch]
public async Task<IActionResult> EditarUsuarios(USUARIO editado) public async Task<IActionResult> EditarUsuarios(USUARIO editado)