204 lines
7.1 KiB
C#
204 lines
7.1 KiB
C#
using MSAdminUsuarios.Context;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using MSAdminUsuarios.Dto;
|
|
using MSAdminUsuarios.Models;
|
|
|
|
namespace MSAdminUsuarios.Controllers
|
|
{
|
|
[ApiController]
|
|
[Route("[controller]")]
|
|
public class PerfilesController : ControllerBase
|
|
{
|
|
private readonly ModelContext _context;
|
|
|
|
public PerfilesController(ModelContext context)
|
|
{
|
|
_context = context;
|
|
}
|
|
|
|
[HttpGet]
|
|
public async Task<IActionResult> GetPerfiles()
|
|
{
|
|
try
|
|
{
|
|
var consulta = from dm in _context.PERFILESMs
|
|
where dm.BL_ESTADO_PFL>=0
|
|
orderby dm.NU_PK_PFL ascending
|
|
select dm;
|
|
|
|
return Ok(consulta);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return BadRequest(ex);
|
|
}
|
|
}
|
|
|
|
[HttpPost]
|
|
public async Task<IActionResult> GuardarPerfiles(PERFIL guardado)
|
|
{
|
|
try
|
|
{
|
|
|
|
if (guardado == null) return ValidationProblem();
|
|
|
|
if (guardado.TX_UUID_PFL == null)
|
|
{
|
|
Guid uuid = Guid.NewGuid();
|
|
var UUID = uuid.ToString();
|
|
guardado.TX_UUID_PFL = UUID;
|
|
}
|
|
|
|
_context.PERFILESMs.Add(guardado);
|
|
await _context.SaveChangesAsync();
|
|
return Ok();
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return BadRequest(ex.Message);
|
|
}
|
|
}
|
|
|
|
[HttpPatch]
|
|
public async Task<IActionResult> EditarPerfiles(PERFIL editado)
|
|
{
|
|
try
|
|
{
|
|
if (editado == null) return ValidationProblem();
|
|
|
|
var existe = _context.PERFILESMs.Find(editado.NU_PK_PFL);
|
|
|
|
if (existe == null)
|
|
{
|
|
return BadRequest("Perfil no encontrado");
|
|
}
|
|
|
|
existe.TX_PERFIL_PFL = editado.TX_PERFIL_PFL;
|
|
existe.NU_ROL_PFL = editado.NU_ROL_PFL;
|
|
existe.BL_ESTADO_PFL = editado.BL_ESTADO_PFL;
|
|
|
|
_context.PERFILESMs.Update(existe);
|
|
await _context.SaveChangesAsync();
|
|
return Ok();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|