public async Task <ActionResult <Muro> > DeleteMuro(int id) { // Se valida que el usuario es el dueño del muro a eliminar... UsuarioMuro usuarioMuro = await _context.UsuarioMuro .SingleOrDefaultAsync(um => um.IdMuro == id && um.IdDuenno == Conectado.ID(this) && um.Permiso == 1 ); if (usuarioMuro == null) { ModelState.AddModelError( nameof(id), "El muro ingresado no existe o no eres dueño de éste."); return(ValidationProblem()); } // Se elimina el muro seleccionado... Muro muro = await _context.Muro.SingleOrDefaultAsync(m => m.Id == id); if (muro != null) { _context.Muro.Remove(muro); await _context.SaveChangesAsync(); } return(Ok()); }
public void OtorgarPermiso(int idMuro, string usuario, short permiso) { if (permiso < 2 || permiso > 3) { Response.StatusCode = 500; return; } if (usuario == null || usuario.Trim().Equals("")) { Response.StatusCode = 500; return; } var usuarioAux = _dbContext.Usuario.SingleOrDefault(u => u.Correo == usuario); if (usuarioAux == null) { Response.StatusCode = 500; return; } if (usuarioAux.Id == Int32.Parse(((ClaimsIdentity)User.Identity).FindFirst(ClaimTypes.NameIdentifier).Value)) { Response.StatusCode = 500; return; } var usuarioMuro = _dbContext.UsuarioMuro.SingleOrDefault(um => um.IdDuenno == Int32.Parse(((ClaimsIdentity)User.Identity).FindFirst(ClaimTypes.NameIdentifier).Value) && um.IdMuro == idMuro); if (usuarioMuro == null || usuarioMuro.Permiso != 1) { Response.StatusCode = 500; return; } usuarioMuro = _dbContext.UsuarioMuro.SingleOrDefault(um => um.IdDuenno == usuarioAux.Id && um.IdMuro == idMuro); if (usuarioMuro != null) { Response.StatusCode = 500; return; } usuarioMuro = new UsuarioMuro { IdDuenno = usuarioAux.Id, IdMuro = idMuro, Permiso = permiso }; _dbContext.UsuarioMuro.Add(usuarioMuro); _dbContext.SaveChanges(); Response.StatusCode = 200; }
public async Task <ActionResult <SalPermisoLista> > PutUsuarioMuro(EntPermisoRelacion permisoRelacion) { permisoRelacion.Correo = permisoRelacion.Correo.Trim(); // Se valida que el muro pertenezca al usuario que inició sesión... UsuarioMuro usuarioMuro = await _context.UsuarioMuro .SingleOrDefaultAsync(um => um.IdMuro == permisoRelacion.IdMuro && um.IdDuenno == Conectado.ID(this) && um.Permiso == 1 ); if (usuarioMuro == null) { ModelState.AddModelError( nameof(permisoRelacion.IdMuro), "El muro ingresado no existe, o no te pertenece."); return(ValidationProblem()); } // Se valida que exista la relación que se está tratando de modificar... usuarioMuro = await _context.UsuarioMuro .Include(um => um.IdDuennoNavigation) .SingleOrDefaultAsync(um => um.IdDuennoNavigation.Correo == permisoRelacion.Correo && um.IdMuro == permisoRelacion.IdMuro && um.Permiso != 1 ); if (usuarioMuro == null) { ModelState.AddModelError( nameof(permisoRelacion.Correo), "El permiso que se quiere modificar no existe."); return(ValidationProblem()); } // Se cambia el permiso de la relación... usuarioMuro.Permiso = permisoRelacion.Permiso; await _context.SaveChangesAsync(); SalPermisoLista salida = new SalPermisoLista() { IdUsuario = usuarioMuro.IdDuenno, NombreUsuario = usuarioMuro.IdDuennoNavigation.Nombre, CorreoUsuario = usuarioMuro.IdDuennoNavigation.Correo, Permiso = usuarioMuro.Permiso }; return(salida); }
public async Task <ActionResult <SalMuroConEtapas> > GetMuro(int idMuro) { // Se valida que el usuario sea dueño del muro... UsuarioMuro usuarioMuro = await _context.UsuarioMuro .Include(um => um.IdMuroNavigation) .SingleOrDefaultAsync(um => um.IdMuro == idMuro && um.IdDuenno == Conectado.ID(this) && um.Permiso == 1 ); if (usuarioMuro == null) { ModelState.AddModelError( nameof(idMuro), "El muro ingresado no existe o no eres dueño de éste."); return(ValidationProblem()); } // Se crea la salida solicitada... SalMuroConEtapas salida = new SalMuroConEtapas() { IdMuro = usuarioMuro.IdMuroNavigation.Id, NombreMuro = usuarioMuro.IdMuroNavigation.Nombre, FechaCreacion = usuarioMuro.IdMuroNavigation.FechaCreacion.ToString("yyyyMMddHHmmss"), FechaUltimaModificacion = usuarioMuro.IdMuroNavigation.FechaUltimaModificacion.ToString("yyyyMMddHHmmss"), Permiso = usuarioMuro.Permiso }; // Se obtiene una lista de las etapas asociadas al muro... ICollection <Etapa> etapas = await _context.Etapa .Where(e => e.IdMuro == idMuro) .OrderBy(e => e.Posicion) .ToListAsync(); // Se agregan las etapas a la salida... foreach (Etapa etapa in etapas) { SalEtapaBase etapaBase = new SalEtapaBase() { Id = etapa.Id, Nombre = etapa.Nombre, Posicion = etapa.Posicion }; salida.Etapas.Add(etapaBase); } return(salida); }
public async Task <IActionResult> DeleteUsuarioMuro(int idMuro, string correo) { correo = correo.Trim(); // Se valida que el muro pertenezca al usuario que inició sesión... UsuarioMuro usuarioMuro = await _context.UsuarioMuro .SingleOrDefaultAsync(um => um.IdMuro == idMuro && um.IdDuenno == Conectado.ID(this) && um.Permiso == 1 ); if (usuarioMuro == null) { ModelState.AddModelError( nameof(idMuro), "El muro ingresado no existe, o no te pertenece."); return(ValidationProblem()); } // Se valida que exista la relación que se está tratando de eliminar... usuarioMuro = await _context.UsuarioMuro .Include(um => um.IdDuennoNavigation) .SingleOrDefaultAsync(um => um.IdDuennoNavigation.Correo == correo && um.IdMuro == idMuro && um.Permiso != 1 ); if (usuarioMuro == null) { ModelState.AddModelError( nameof(correo), "El permiso que se quiere eliminar no existe."); return(ValidationProblem()); } // Se elimina la relación... _context.UsuarioMuro.Remove(usuarioMuro); await _context.SaveChangesAsync(); return(Ok()); }
public async Task <ActionResult <IEnumerable <SalMuroDuenno> > > GetMuro() { List <SalMuroDuenno> salida = new List <SalMuroDuenno>(); // Se obtiene la lista de muros visibles por el usuario... List <UsuarioMuro> muros = await _context.UsuarioMuro .Include(um => um.IdMuroNavigation) .Where(um => um.IdDuenno == Conectado.ID(this)) .ToListAsync(); // Por cada muro obtenido, se obtienen los datos de éste... foreach (UsuarioMuro usuarioMuro in muros) { SalMuroDuenno muroLista = new SalMuroDuenno() { IdMuro = usuarioMuro.IdMuro, NombreMuro = usuarioMuro.IdMuroNavigation.Nombre, Permiso = usuarioMuro.Permiso, FechaCreacion = usuarioMuro.IdMuroNavigation.FechaCreacion.ToString("dd/MM/yyyy HH:mm:ss"), FechaUltimaModificacion = usuarioMuro.IdMuroNavigation.FechaUltimaModificacion.ToString("dd/MM/yyyy HH:mm:ss") }; // Se obtiene el nombre/correo del dueño del muro visible por el usuario... UsuarioMuro duennoMuro = await _context.UsuarioMuro .Include(um => um.IdDuennoNavigation) .Where(um => um.Permiso == 1 && um.IdMuro == usuarioMuro.IdMuro) .FirstOrDefaultAsync(); if (duennoMuro != null) { muroLista.NombreDuenno = duennoMuro.IdDuennoNavigation.Nombre; muroLista.CorreoDuenno = duennoMuro.IdDuennoNavigation.Correo; } salida.Add(muroLista); } return(salida); }
public async Task <ActionResult <IEnumerable <SalPermisoLista> > > GetUsuarioMuro(int idMuro) { List <SalPermisoLista> salida = new List <SalPermisoLista>(); // Se valida que el usuario es el dueño del muro... UsuarioMuro duennoMuro = await _context.UsuarioMuro .SingleOrDefaultAsync(um => um.IdMuro == idMuro && um.IdDuenno == Conectado.ID(this) && um.Permiso == 1); if (duennoMuro == null) { ModelState.AddModelError( nameof(idMuro), "El muro ingresado no existe o no eres dueño de éste."); return(ValidationProblem()); } // Se obtiene los usuarios que tienen permisos sobre el muro... List <UsuarioMuro> usuariosMuro = await _context.UsuarioMuro .Include(um => um.IdDuennoNavigation) .Where(um => um.IdMuro == idMuro) .ToListAsync(); // Se agregan los elementos a la salida... foreach (UsuarioMuro usuarioMuro in usuariosMuro) { SalPermisoLista permiso = new SalPermisoLista() { IdUsuario = usuarioMuro.IdDuenno, NombreUsuario = usuarioMuro.IdDuennoNavigation.Nombre, CorreoUsuario = usuarioMuro.IdDuennoNavigation.Correo, Permiso = usuarioMuro.Permiso }; salida.Add(permiso); } return(salida); }
public async Task <IActionResult> Renunciar(int idMuro) { // Se valida que exista la relación, y el usuario no sea dueño... UsuarioMuro usuarioMuro = await _context.UsuarioMuro .SingleOrDefaultAsync(um => um.IdDuenno == Conectado.ID(this) && um.IdMuro == idMuro && um.Permiso != 1 ); if (usuarioMuro == null) { ModelState.AddModelError( nameof(idMuro), "No tienes permisos sobre el muro seleccionado."); return(ValidationProblem()); } // Se elimina el permiso del usuario... _context.UsuarioMuro.Remove(usuarioMuro); await _context.SaveChangesAsync(); return(Ok()); }
public async Task <IActionResult> PutMuro(EntMuroIdEtapaId entradaMuro) { //Se valida que el usuario es el dueño del muro a modificar... UsuarioMuro usuarioMuro = await _context.UsuarioMuro.SingleOrDefaultAsync(um => um.IdDuenno == Conectado.ID(this) && um.IdMuro == entradaMuro.Id && um.Permiso == 1); if (usuarioMuro == null) { ModelState.AddModelError( nameof(entradaMuro.Id), "El muro ingresado no existe o no eres dueño de éste."); return(ValidationProblem()); } Muro muro = await _context.Muro.SingleOrDefaultAsync(m => m.Id == entradaMuro.Id); if (muro == null) { ModelState.AddModelError( nameof(entradaMuro.Id), "El muro ingresado no existe o no eres dueño de éste."); return(ValidationProblem()); } muro.Nombre = entradaMuro.Nombre; muro.FechaUltimaModificacion = DateTime.Now; // Se modifican las etapas existentes, y se marcan las etapas a eliminar... List <Etapa> etapasEliminadas = new List <Etapa>(); List <Etapa> etapas = await _context.Etapa .Where(e => e.IdMuro == muro.Id) .OrderBy(e => e.Posicion) .ToListAsync(); foreach (Etapa etapa in etapas) { bool clienteLoElimino = true; foreach (EntEtapaId etapaCliente in entradaMuro.Etapas) { if (etapa.Id == etapaCliente.Id) { etapa.Nombre = etapaCliente.Nombre; etapa.Posicion = etapaCliente.Posicion; clienteLoElimino = false; break; } } if (clienteLoElimino) { etapasEliminadas.Add(etapa); } } // Se agregan las etapas nuevas al muro... foreach (EntEtapaId etapaCliente in entradaMuro.Etapas) { if (etapaCliente.Id == 0) { Etapa etapa = new Etapa() { IdMuro = muro.Id, Nombre = etapaCliente.Nombre, Posicion = etapaCliente.Posicion }; await _context.Etapa.AddAsync(etapa); } } await _context.SaveChangesAsync(); // Se cambian las tareas de etapas eliminadas, a las etapas que corresponden... if (entradaMuro.Accion != 3) { Etapa etapaDestino = null; if (entradaMuro.Accion == 1) { etapas = await _context.Etapa .Where(e => e.IdMuro == muro.Id) .OrderBy(e => e.Posicion) .ToListAsync(); } else { etapas = await _context.Etapa .Where(e => e.IdMuro == muro.Id) .OrderByDescending(e => e.Posicion) .ToListAsync(); } foreach (Etapa etapa in etapas) { bool seraEliminada = false; foreach (Etapa etapaEliminada in etapasEliminadas) { if (etapa.Id == etapaEliminada.Id) { seraEliminada = true; break; } } if (!seraEliminada) { etapaDestino = etapa; break; } } if (etapaDestino != null) { Tarea ultTarea = await _context.Tarea .Where(t => t.IdEtapa == etapaDestino.Id) .OrderByDescending(t => t.Posicion) .FirstOrDefaultAsync(); List <Tarea> tareasMover = new List <Tarea>(); foreach (Etapa etapaEliminada in etapasEliminadas) { tareasMover.AddRange(await _context.Tarea .Where(t => t.IdEtapa == etapaEliminada.Id) .OrderBy(t => t.Posicion) .ToListAsync()); } short pos = 0; if (ultTarea != null) { pos = ultTarea.Posicion; } foreach (Tarea tareaMover in tareasMover) { pos++; tareaMover.IdEtapa = etapaDestino.Id; tareaMover.Posicion = pos; } await _context.SaveChangesAsync(); } } _context.Etapa.RemoveRange(etapasEliminadas); await _context.SaveChangesAsync(); return(Ok()); }
public async Task <ActionResult <SalMuroConEtapas> > PostMuros(EntMuroEtapa entradaMuro) { // Se crea el nuevo muro... Muro muro = new Muro() { Nombre = entradaMuro.Nombre, FechaCreacion = DateTime.Now, FechaUltimaModificacion = DateTime.Now }; await _context.Muro.AddAsync(muro); await _context.SaveChangesAsync(); // Se crea la relación usuario/muro... UsuarioMuro usuarioMuro = new UsuarioMuro() { IdDuenno = Conectado.ID(this), IdMuro = muro.Id, Permiso = 1 }; await _context.UsuarioMuro.AddAsync(usuarioMuro); // Se crean las etapas del muro... List <Etapa> etapasCreadas = new List <Etapa>(); foreach (EntEtapaBase entEtapa in entradaMuro.Etapas) { Etapa etapa = new Etapa() { IdMuro = muro.Id, Nombre = entEtapa.Nombre, Posicion = entEtapa.Posicion }; await _context.Etapa.AddAsync(etapa); etapasCreadas.Add(etapa); } await _context.SaveChangesAsync(); SalMuroConEtapas salida = new SalMuroConEtapas() { IdMuro = muro.Id, NombreMuro = muro.Nombre, FechaCreacion = muro.FechaCreacion.ToString("yyyyMMddHHmmss"), FechaUltimaModificacion = muro.FechaUltimaModificacion.ToString("yyyyMMddHHmmss"), Permiso = usuarioMuro.Permiso }; foreach (Etapa etapaCreada in etapasCreadas) { SalEtapaBase salidaEtapa = new SalEtapaBase() { Id = etapaCreada.Id, Nombre = etapaCreada.Nombre, Posicion = etapaCreada.Posicion }; salida.Etapas.Add(salidaEtapa); } return(salida); }
public async Task <ActionResult <SalMuroConTareas> > ModificarTareas(EntMuroSoloId entradaMuro) { // Se valida que el usuario tenga permisos de edición en el muro... UsuarioMuro usuarioMuro = await _context.UsuarioMuro .Include(um => um.IdMuroNavigation) .SingleOrDefaultAsync(um => um.IdMuro == entradaMuro.Id && um.IdDuenno == Conectado.ID(this) && (um.Permiso == 1 || um.Permiso == 2) ); if (usuarioMuro == null) { ModelState.AddModelError( nameof(entradaMuro.Id), "El muro ingresado no existe o no tienes permisos sobre éste."); return(ValidationProblem()); } // Se valida que todas las etapas sean parte del muro a editar... foreach (EntEtapaSoloId entradaEtapa in entradaMuro.Etapas) { Etapa etapa = await _context.Etapa .SingleOrDefaultAsync(e => e.Id == entradaEtapa.Id && e.IdMuro == entradaMuro.Id ); if (etapa == null) { ModelState.AddModelError( nameof(entradaEtapa.Id), "Una de las etapas ingresadas no pertenece al muro..."); return(ValidationProblem()); } } // Se eliminan las tareas que no son recibidas desde el cliente... List <Tarea> tareasExistentes = await _context.Tarea .Include(t => t.IdEtapaNavigation) .Where(t => t.IdEtapaNavigation.IdMuro == entradaMuro.Id) .ToListAsync(); foreach (Tarea tareaExistente in tareasExistentes) { bool existeTarea = false; foreach (EntEtapaSoloId entradaEtapa in entradaMuro.Etapas) { foreach (EntTareaBase entradaTarea in entradaEtapa.Tareas) { if (tareaExistente.Id == entradaTarea.Id) { existeTarea = true; break; } } if (existeTarea) { break; } ; } if (!existeTarea) { _context.Tarea.Remove(tareaExistente); } } // Se agregan o modifican el resto de tareas... foreach (EntEtapaSoloId entradaEtapa in entradaMuro.Etapas) { foreach (EntTareaBase entradaTarea in entradaEtapa.Tareas) { Tarea tareaOriginal = await _context.Tarea .Include(t => t.IdEtapaNavigation) .SingleOrDefaultAsync(t => t.Id == entradaTarea.Id && t.IdEtapaNavigation.IdMuro == entradaMuro.Id ); if (tareaOriginal == null) { // Se agregan las tareas que no existen en la base de datos... Tarea nuevaTarea = new Tarea() { Titulo = entradaTarea.Titulo, Descripcion = entradaTarea.Descripcion, IdEtapa = entradaEtapa.Id, Posicion = entradaTarea.Posicion, Familia = entradaTarea.Familia, Red = entradaTarea.Red, Green = entradaTarea.Green, Blue = entradaTarea.Blue }; _context.Tarea.Add(nuevaTarea); } else { tareaOriginal.Titulo = entradaTarea.Titulo; tareaOriginal.Descripcion = entradaTarea.Descripcion; tareaOriginal.IdEtapa = entradaEtapa.Id; tareaOriginal.Posicion = entradaTarea.Posicion; tareaOriginal.Familia = entradaTarea.Familia; tareaOriginal.Red = entradaTarea.Red; tareaOriginal.Green = entradaTarea.Green; tareaOriginal.Blue = entradaTarea.Blue; _context.Tarea.Update(tareaOriginal); } } } // Se modifica la fecha de última actualización... Muro muro = await _context.Muro.SingleOrDefaultAsync(m => m.Id == entradaMuro.Id); muro.FechaUltimaModificacion = DateTime.Now; await _context.SaveChangesAsync(); return(await ObtenerTareas(entradaMuro.Id)); }
public async Task <ActionResult <SalMuroConTareas> > ObtenerTareas(int idMuro) { // Se valida que el usuario tenga permisos sobre el muro... UsuarioMuro usuarioMuro = await _context.UsuarioMuro .Include(um => um.IdMuroNavigation) .SingleOrDefaultAsync(um => um.IdMuro == idMuro && um.IdDuenno == Conectado.ID(this) && (um.Permiso == 1 || um.Permiso == 2 || um.Permiso == 3) ); if (usuarioMuro == null) { ModelState.AddModelError( nameof(idMuro), "El muro ingresado no existe o no tienes permisos sobre éste."); return(ValidationProblem()); } // Se crea la salida solicitada... SalMuroConTareas salida = new SalMuroConTareas() { IdMuro = usuarioMuro.IdMuroNavigation.Id, NombreMuro = usuarioMuro.IdMuroNavigation.Nombre, FechaCreacion = usuarioMuro.IdMuroNavigation.FechaCreacion.ToString("yyyyMMddHHmmss"), FechaUltimaModificacion = usuarioMuro.IdMuroNavigation.FechaUltimaModificacion.ToString("yyyyMMddHHmmss"), Permiso = usuarioMuro.Permiso }; // Se obtiene una lista de las etapas asociadas al muro... ICollection <Etapa> etapas = await _context.Etapa .Where(e => e.IdMuro == idMuro) .OrderBy(e => e.Posicion) .ToListAsync(); // Se agregan las etapas a la salida... foreach (Etapa etapa in etapas) { SalEtapaConTareas etapaConTareas = new SalEtapaConTareas() { Id = etapa.Id, Nombre = etapa.Nombre, Posicion = etapa.Posicion }; // Se obtiene una lista de las tareas asociadas a la etapa... ICollection <Tarea> tareas = await _context.Tarea .Where(t => t.IdEtapa == etapa.Id) .OrderBy(t => t.Posicion) .ToListAsync(); // Se agregan las tareas a la etapa... foreach (Tarea tarea in tareas) { SalTareaBase tareaBase = new SalTareaBase() { Id = tarea.Id, Titulo = tarea.Titulo, Descripcion = tarea.Descripcion, Posicion = tarea.Posicion, Familia = tarea.Familia, Red = tarea.Red, Green = tarea.Green, Blue = tarea.Blue }; etapaConTareas.Tareas.Add(tareaBase); } salida.Etapas.Add(etapaConTareas); } return(salida); }
public void Grabar(string nombre) { if (nombre == null || nombre.Trim().Equals("")) { Response.StatusCode = 500; return; } var muro = new Muro() { Nombre = nombre, FechaCreacion = DateTime.Now, FechaUltimaModificacion = DateTime.Now }; _dbContext.Muro.Add(muro); _dbContext.SaveChanges(); var usuarioMuro = new UsuarioMuro() { IdDuenno = Int32.Parse(((ClaimsIdentity)User.Identity).FindFirst(ClaimTypes.NameIdentifier).Value), IdMuro = muro.Id, Permiso = 1 }; _dbContext.UsuarioMuro.Add(usuarioMuro); _dbContext.Etapa.Add(new Etapa() { Nombre = "HISTORIA", IdMuro = muro.Id, Posicion = 1 }); _dbContext.Etapa.Add(new Etapa() { Nombre = "PENDIENTE", IdMuro = muro.Id, Posicion = 2 }); _dbContext.Etapa.Add(new Etapa() { Nombre = "EN CONSTRUCCIÓN", IdMuro = muro.Id, Posicion = 3 }); _dbContext.Etapa.Add(new Etapa() { Nombre = "COMPLETADO", IdMuro = muro.Id, Posicion = 4 }); _dbContext.Etapa.Add(new Etapa() { Nombre = "PRUEBA", IdMuro = muro.Id, Posicion = 5 }); _dbContext.SaveChanges(); Response.StatusCode = 200; }
public async Task <ActionResult> ObtenerInfoActualizada(int idMuro) { UsuarioMuro usuarioMuro = await _dbContext.UsuarioMuro .SingleOrDefaultAsync(um => um.IdDuenno == Int32.Parse(((ClaimsIdentity)User.Identity).FindFirst(ClaimTypes.NameIdentifier).Value) && um.IdMuro == idMuro); if (usuarioMuro == null) { return(StatusCode(401)); } Muro muro = await _dbContext.Muro .SingleOrDefaultAsync(m => m.Id == idMuro); JSONMuro jsonMuro = new JSONMuro { Id = muro.Id, Nombre = WebUtility.HtmlEncode(muro.Nombre), FechaCreacion = muro.FechaCreacion.ToString("yyyyMMddHHmmss"), FechaUltimaModificacion = muro.FechaUltimaModificacion.ToString("yyyyMMddHHmmss"), Permiso = usuarioMuro.Permiso, Etapas = new List <JSONEtapa>() }; List <Etapa> listaEtapas = await _dbContext.Etapa .Where(e => e.IdMuro == muro.Id) .OrderBy(e => e.Posicion) .ToListAsync(); foreach (Etapa etapa in listaEtapas) { jsonMuro.Etapas.Add(new JSONEtapa { Id = etapa.Id, Nombre = WebUtility.HtmlEncode(etapa.Nombre), Posicion = etapa.Posicion, Tareas = new List <JSONTarea>() }); List <Tarea> listaTareas = await _dbContext.Tarea .Where(t => t.IdEtapa == etapa.Id) .OrderBy(t => t.Posicion) .ToListAsync(); foreach (Tarea tarea in listaTareas) { jsonMuro.Etapas.LastOrDefault().Tareas.Add(new JSONTarea { Id = tarea.Id, Titulo = WebUtility.HtmlEncode(tarea.Titulo), Descripcion = WebUtility.HtmlEncode(tarea.Descripcion), Posicion = tarea.Posicion, Familia = tarea.Familia, Red = tarea.Red, Green = tarea.Green, Blue = tarea.Blue }); } } return(StatusCode(200, Json(jsonMuro))); }
public async Task <IActionResult> EditarMuro(EditarMuroViewModel model) { if (!ModelState.IsValid) { throw new ExcepcionMuroAgil(ModelState.Values .SelectMany(v => v.Errors) .Select(e => e.ErrorMessage) .First()); } // Se crea el muro, o se modifica si ya existe. Muro muro = null; if (model.Id == 0) { muro = new Muro() { Nombre = model.Nombre, FechaCreacion = DateTime.Now, FechaUltimaModificacion = DateTime.Now }; await _dbContext.Muro.AddAsync(muro); await _dbContext.SaveChangesAsync(); UsuarioMuro usuarioMuro = new UsuarioMuro() { IdDuenno = int.Parse(((ClaimsIdentity)User.Identity).FindFirst(ClaimTypes.NameIdentifier).Value), IdMuro = muro.Id, Permiso = 1 }; await _dbContext.UsuarioMuro.AddAsync(usuarioMuro); } else { UsuarioMuro usuarioMuro = await _dbContext.UsuarioMuro.SingleOrDefaultAsync(um => um.IdDuenno == int.Parse(((ClaimsIdentity)User.Identity).FindFirst(ClaimTypes.NameIdentifier).Value) && um.IdMuro == model.Id && um.Permiso == 1); if (usuarioMuro == null) { throw new ExcepcionMuroAgil("No está autorizado para modificar el muro seleccionado."); } muro = await _dbContext.Muro.SingleOrDefaultAsync(m => m.Id == model.Id); if (muro == null) { throw new ExcepcionMuroAgil("No se encontró el muro que está intentando modificar."); } muro.Nombre = model.Nombre; muro.FechaUltimaModificacion = DateTime.Now; await _dbContext.SaveChangesAsync(); } // Se modifican las etapas existentes, y se marcan las etapas a eliminar List <Etapa> etapasEliminadas = new List <Etapa>(); List <Etapa> etapas = await _dbContext.Etapa .Where(e => e.IdMuro == muro.Id) .OrderBy(e => e.Posicion) .ToListAsync(); foreach (Etapa etapa in etapas) { bool clienteLoElimino = true; foreach (EditarMuroViewModel.Etapa etapaCliente in model.Etapas) { if (etapa.Id == etapaCliente.Id) { etapa.Nombre = etapaCliente.Nombre; etapa.Posicion = etapaCliente.Posicion; clienteLoElimino = false; break; } } if (clienteLoElimino) { etapasEliminadas.Add(etapa); } else { //_dbContext.Etapa.Update(etapa); } } // Se agregan las etapas nuevas al muro foreach (EditarMuroViewModel.Etapa etapaCliente in model.Etapas) { if (etapaCliente.Id == 0) { Etapa etapa = new Etapa() { IdMuro = muro.Id, Nombre = etapaCliente.Nombre, Posicion = etapaCliente.Posicion }; await _dbContext.Etapa.AddAsync(etapa); } } await _dbContext.SaveChangesAsync(); if (model.AccionTareas != 3) { // Se determina la etapa de destino para las tareas que no se quieren eliminar Etapa etapaDestino = null; if (model.AccionTareas == 1) { etapas = await _dbContext.Etapa .Where(e => e.IdMuro == muro.Id) .OrderBy(e => e.Posicion) .ToListAsync(); } else { etapas = await _dbContext.Etapa .Where(e => e.IdMuro == muro.Id) .OrderByDescending(e => e.Posicion) .ToListAsync(); } foreach (Etapa etapa in etapas) { bool seraEliminada = false; foreach (Etapa etapaEliminada in etapasEliminadas) { if (etapa.Id == etapaEliminada.Id) { seraEliminada = true; break; } } if (!seraEliminada) { etapaDestino = etapa; break; } } if (etapaDestino != null) { Tarea ultTarea = await _dbContext.Tarea .Where(t => t.IdEtapa == etapaDestino.Id) .OrderByDescending(t => t.Posicion) .FirstOrDefaultAsync(); List <Tarea> tareasMover = new List <Tarea>(); foreach (Etapa etapaEliminada in etapasEliminadas) { tareasMover.AddRange(await _dbContext.Tarea .Where(t => t.IdEtapa == etapaEliminada.Id) .OrderBy(t => t.Posicion) .ToListAsync()); } short pos = 0; if (ultTarea != null) { pos = ultTarea.Posicion; } foreach (Tarea tareaMover in tareasMover) { pos++; tareaMover.IdEtapa = etapaDestino.Id; tareaMover.Posicion = pos; //_dbContext.Tarea.Update(tareaMover); } await _dbContext.SaveChangesAsync(); } } _dbContext.Etapa.RemoveRange(etapasEliminadas); await _dbContext.SaveChangesAsync(); return(Redirect("/UsuarioMuro/")); }
public async Task <IActionResult> EditarMuro(int id = 0) { EditarMuroViewModel model = new EditarMuroViewModel(); if (id != 0) { var usuarioMuro = await _dbContext.UsuarioMuro.SingleOrDefaultAsync(um => um.IdDuenno == Int32.Parse(((ClaimsIdentity)User.Identity).FindFirst(ClaimTypes.NameIdentifier).Value) && um.IdMuro == id && um.Permiso == 1); if (usuarioMuro == null) { throw new ExcepcionMuroAgil("No está autorizado para editar el muro seleccionado."); } Muro muro = await _dbContext.Muro .SingleOrDefaultAsync(m => m.Id == id); if (muro == null) { throw new ExcepcionMuroAgil("No existe el muro seleccionado."); } model.Id = muro.Id; model.Nombre = muro.Nombre; ICollection <Etapa> etapas = null; etapas = await _dbContext.Etapa .Where(e => e.IdMuro == muro.Id) .OrderBy(e => e.Posicion) .ToListAsync(); model.Etapas = new List <EditarMuroViewModel.Etapa>(); if (etapas != null) { foreach (var etapa in etapas) { EditarMuroViewModel.Etapa viewModelEtapa = new EditarMuroViewModel.Etapa(); viewModelEtapa.Id = etapa.Id; viewModelEtapa.Nombre = etapa.Nombre; viewModelEtapa.Posicion = etapa.Posicion; model.Etapas.Add(viewModelEtapa); } } } else { model.Id = 0; model.Nombre = ""; UsuarioMuro usuarioMuro = await _dbContext.UsuarioMuro .Include(um => um.IdMuroNavigation) .Where(um => um.IdDuenno == Int32.Parse(((ClaimsIdentity)User.Identity).FindFirst(ClaimTypes.NameIdentifier).Value) && um.Permiso == 1) .OrderByDescending(um => um.IdMuroNavigation.FechaCreacion) .FirstOrDefaultAsync(); ICollection <Etapa> etapas = null; if (usuarioMuro != null) { etapas = await _dbContext.Etapa .Where(e => e.IdMuro == usuarioMuro.IdMuro) .OrderBy(e => e.Posicion) .ToListAsync(); } else { etapas = new List <Etapa>(); etapas.Add(new Etapa() { Nombre = "Pendiente", Posicion = 1 }); etapas.Add(new Etapa() { Nombre = "En Proceso", Posicion = 2 }); etapas.Add(new Etapa() { Nombre = "Terminado", Posicion = 3 }); } model.Etapas = new List <EditarMuroViewModel.Etapa>(); if (etapas != null) { foreach (var etapa in etapas) { EditarMuroViewModel.Etapa viewModelEtapa = new EditarMuroViewModel.Etapa(); viewModelEtapa.Id = 0; viewModelEtapa.Nombre = etapa.Nombre; viewModelEtapa.Posicion = etapa.Posicion; model.Etapas.Add(viewModelEtapa); } } } return(View(model)); }
public async Task <ActionResult <SalPermisoLista> > PostUsuarioMuro(EntPermisoRelacion permisoRelacion) { permisoRelacion.Correo = permisoRelacion.Correo.Trim(); // Se valida que el muro pertenezca al usuario que inició sesión... UsuarioMuro usuarioMuro = await _context.UsuarioMuro .SingleOrDefaultAsync(um => um.IdMuro == permisoRelacion.IdMuro && um.IdDuenno == Conectado.ID(this) && um.Permiso == 1 ); if (usuarioMuro == null) { ModelState.AddModelError( nameof(permisoRelacion.IdMuro), "El muro ingresado no existe, o no te pertenece."); return(ValidationProblem()); } // Se valida que el correo ingresado este registrado, y no sea el mismo del usuario que inició sesión... Usuario usuario = await _context.Usuario.SingleOrDefaultAsync(u => u.Correo == permisoRelacion.Correo && u.Id != Conectado.ID(this)); if (usuario == null) { ModelState.AddModelError( nameof(permisoRelacion.Correo), "El correo ingresado no es válido."); return(ValidationProblem()); } // Se valida que la relación Muro/Usuario no existiese de antes... usuarioMuro = await _context.UsuarioMuro .SingleOrDefaultAsync(um => um.IdMuro == permisoRelacion.IdMuro && um.IdDuenno == usuario.Id ); if (usuarioMuro != null) { ModelState.AddModelError( nameof(permisoRelacion.Correo), "El usuario ingresado ya tiene permisos sobre el muro."); return(ValidationProblem()); } // Se crea la nueva relación... usuarioMuro = new UsuarioMuro { IdDuenno = usuario.Id, IdMuro = permisoRelacion.IdMuro, Permiso = permisoRelacion.Permiso }; await _context.UsuarioMuro.AddAsync(usuarioMuro); await _context.SaveChangesAsync(); SalPermisoLista salida = new SalPermisoLista() { IdUsuario = usuarioMuro.IdDuenno, NombreUsuario = usuario.Nombre, CorreoUsuario = usuario.Correo, Permiso = usuarioMuro.Permiso }; return(salida); }