using MSAdminUsuarios.Context; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Transactions; using Microsoft.EntityFrameworkCore.Storage; using RabbitMQ.Client; namespace MSAdminUsuarios.Controllers { [ApiController] [Route("[controller]")] public class PerfilesPorUsuarioController : ControllerBase { private readonly ModelContext _context; //private readonly IModel _channel; public PerfilesPorUsuarioController(ModelContext context) { _context = context; //_channel = channel; } [HttpGet] public async Task GetPerfilesPorUsuario() { try { var consulta = from dm in _context.PERFILESPORUSUARIOs where dm.BL_ESTADO_PFLXUSU > 0 select dm; return Ok(consulta); } catch (Exception ex) { return BadRequest(ex); } } [HttpPost] public async Task GuardarPerfilesPorUsuario(PERFILPORUSUARIO[] guardar) { using (var dbContextTransaction = _context.Database.BeginTransaction()) { List error = new(); //Inicializamos variable para guardar errores try { //var error = await GuardarPerfiles(guardar, _context); 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(); } } dbContextTransaction.Commit(); List all = new List(); all.Add($"Total registros: {guardar.Count().ToString()}"); all.Add($"Exitosos: {(guardar.Count() - error.Count()).ToString()}"); all.Add($"Erroneos: {error.Count().ToString()}"); var flag_r = 0; foreach (var r in error) { flag_r++; all.Add($"Error #{flag_r}: {r}"); } if (error.Count() > 0) { return Conflict(all.ToList()); } return Ok(); } catch (Exception ex) { //hacemos rollback si hay excepción dbContextTransaction.Rollback(); return BadRequest(ex.Message); } }; } } }