Ajuste de perfiles

This commit is contained in:
Dario F. Gomez Z 2024-04-11 10:50:46 -05:00
parent b244307904
commit 33b9913d72

View File

@ -1,5 +1,8 @@
using MSAdminUsuarios.Context;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using MSAdminUsuarios.Dto;
using MSAdminUsuarios.Models;
namespace MSAdminUsuarios.Controllers
{
@ -85,6 +88,116 @@ namespace MSAdminUsuarios.Controllers
return BadRequest(ex.Message);
}
}
[HttpPost("PerfilPermisos")]
public async Task<IActionResult> PostPerfilPermisos(PerfilPermisosDTO 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("InicioCreacionPerfilPermisos");
if (nuevo.perfil == null)
{
_errorModel.error = true;
_errorModel.cuerpo.Add("Sin perfil a guardar.");
return Conflict(_errorModel);
}
if (nuevo.perfil.TX_UUID_PFL == null)
{
Guid uuid = Guid.NewGuid();
var UUID = uuid.ToString();
nuevo.perfil.TX_UUID_PFL = UUID;
_context.PERFILESMs.Add(nuevo.perfil);
await _context.SaveChangesAsync();
}
else
{
PERFIL? existe = _context.PERFILESMs.FirstOrDefault(prfl => prfl.TX_UUID_PFL == nuevo.perfil.TX_UUID_PFL);
if (existe == null)
{
_errorModel.error = true;
_errorModel.cuerpo.Add("El perfil no existe.");
return Conflict(_errorModel);
}
existe.TX_PERFIL_PFL = nuevo.perfil.TX_PERFIL_PFL;
existe.NU_ROL_PFL = nuevo.perfil.NU_ROL_PFL;
existe.BL_ESTADO_PFL = nuevo.perfil.BL_ESTADO_PFL;
_context.PERFILESMs.Update(existe);
_context.SaveChanges();
}
// TODO: Validacion agregada mientras se aclara el proceso
PERFIL? creado = await _context.PERFILESMs.FirstOrDefaultAsync(prfl => prfl.TX_UUID_PFL == nuevo.perfil.TX_UUID_PFL);
if (nuevo.permisos != null)
{
// Se cambia a estado 0 todos los perfiles por usuario existentes
List<PERMISO> permisos = _context.PERMISOSMs.Where(x => x.BL_ESTADO_PMS == 1 && x.NU_FK_PFL == creado.NU_PK_PFL).ToList();
foreach (var permiso in permisos)
{
permiso.BL_ESTADO_PMS = 0;
_context.PERMISOSMs.Update(permiso);
await _context.SaveChangesAsync();
}
foreach (var pxp in nuevo.permisos)
{
PERMISO? existe = _context.PERMISOSMs.FirstOrDefault(pm => pm.NU_FK_PFL == pxp.NU_FK_PFL && pm.NU_FK_MS == pxp.NU_FK_MS);
if (existe != null)
{
//Si existe activamos estado 1 del perfil
existe.BL_ESTADO_PMS = 1;
_context.Update(existe);
await _context.SaveChangesAsync();
continue;
}
else
{
if (pxp == null)
{
_errorModel.error = true;
_errorModel.cuerpo.Add($"Permiso sin valores");
continue;
}
pxp.BL_ESTADO_PMS = 1;
pxp.NU_FK_PFL = creado.NU_PK_PFL;
_context.PERMISOSMs.Add(pxp);
await _context.SaveChangesAsync();
}
}
}
transaccion.Commit();
_errorModel.error = false;
_errorModel.cuerpo.Add("Perfil creado correctamente");
return Ok(_errorModel);
}
catch (Exception e)
{
transaccion.RollbackToSavepoint("InicioCreacionPerfilPermisos");
return BadRequest(e.Message);
}
}
}
}
}