From 33b9913d729f1ebac8e9e108b00ca1ff89f5f186 Mon Sep 17 00:00:00 2001 From: "Dario F. Gomez Z" Date: Thu, 11 Apr 2024 10:50:46 -0500 Subject: [PATCH] Ajuste de perfiles --- .../Controllers/PerfilesController.cs | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/Microservicios/MsUsuarios/Controllers/PerfilesController.cs b/Microservicios/MsUsuarios/Controllers/PerfilesController.cs index 818856a..26f8c1d 100644 --- a/Microservicios/MsUsuarios/Controllers/PerfilesController.cs +++ b/Microservicios/MsUsuarios/Controllers/PerfilesController.cs @@ -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 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 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); + } + } + } } }