Injección en usuarios para asignar perfil si es Integrante Comité
- Abstracción en PerfilesPorUsuario para permitir llamado interno
This commit is contained in:
parent
de15c5e7be
commit
3a885a5677
@ -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,10 +79,73 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user