Example #1
0
        public ActionResult Logotipo(long?id = null)
        {
            IAplicacionesServicio srv = Servicios.AplicacionesServicio();
            long       appID          = id ?? Aplicacion.AplicacionID;
            Aplicacion aplicacion     = srv.GetSingle(c => c.AplicacionID == appID);

            if (aplicacion != null)
            {
                if (aplicacion.Logotipo == null)
                {
                    return(File("~/Content/Images/PushNewsLogo.png", contentType: "image/png"));
                }
                else
                {
                    var cd = new ContentDisposition
                    {
                        FileName = aplicacion.Logotipo.Nombre,
                        Inline   = false,
                    };
                    Response.AppendHeader(name: "Content-Disposition", value: cd.ToString());
                    FileStream str = FileManager.ObtenerDocumento(aplicacion.Logotipo);
                    return(new FileStreamResult(str, aplicacion.Logotipo.Mime));
                }
            }
            else
            {
                return(HttpNotFound());
            }
        }
Example #2
0
        public ActionResult ListaAplicaciones()
        {
            IAplicacionesServicio        srv      = Servicios.AplicacionesServicio();
            IEnumerable <AplicacionGrid> consulta = srv.Get().Select(AplicacionGrid.FromEntity);

            return(Json(consulta, JsonRequestBehavior.AllowGet));
        }
Example #3
0
        public ActionResult Leer([DataSourceRequest] DataSourceRequest request)
        {
            IAplicacionesServicio        srv       = Servicios.AplicacionesServicio();
            IEnumerable <Aplicacion>     registros = srv.Get();
            IEnumerable <AplicacionGrid> resultado = registros.Select(r => AplicacionGrid.FromEntity(r));

            return(Json(resultado.ToDataSourceResult(request), JsonRequestBehavior.AllowGet));
        }
Example #4
0
        public async Task <ActionResult> Nuevo([DataSourceRequest] DataSourceRequest request, ComunicacionGrid model)
        {
            DataSourceResult result = new[] { model }.ToDataSourceResult(request, ModelState);

            if (ModelState.IsValid)
            {
                // Validar la categoría escogida por el usuario
                if (CategoriaPermitida(model.CategoriaID))
                {
                    try
                    {
                        IAplicacionesServicio appSrv = Servicios.AplicacionesServicio();
                        Aplicacion            app    = appSrv.GetSingle(c => c.AplicacionID == Aplicacion.AplicacionID);
                        bool mantenerUbicacion       = app.Caracteristicas.Any(c => c.Nombre == "GeoPosicionamiento");
                        var  srv   = Servicios.ComunicacionesServicio();
                        var  nuevo = srv.Create();
                        model.ActualizarEntidad(nuevo, mantenerUbicacion);
                        nuevo.UsuarioID   = CurrentUserID();
                        nuevo.Instantanea = model.FechaPublicacion < DateTime.Now;
                        srv.Insert(nuevo);
                        await srv.ApplyChangesAsync();

                        if (nuevo.Instantanea)
                        {
                            if (EnviarPush(nuevo))
                            {
                                nuevo.PushEnviada = true;
                                nuevo.PushFecha   = DateTime.Now;
                                await srv.ApplyChangesAsync();
                            }
                            else
                            {
                                nuevo.Instantanea = false;
                                await srv.ApplyChangesAsync();
                            }
                        }

                        result = new[]
                        {
                            ComunicacionGrid.FromEntity(nuevo, CategoriasPermitidasIds, PeriodoEnvioPushHoras)
                        }.ToDataSourceResult(request, ModelState);
                    }
                    catch (Exception e)
                    {
                        log.Error("Error al añadir la comunicación.", e);
                        result.Errors = new[] { string.Format(Txt.ErroresComunes.Aniadir, Txt.Comunicaciones.ArtEntidad).Frase() };
                    }
                }
                else
                {
                    log.Warn($"El usuario {Usuario.Nombre} ({Usuario.UsuarioID}) ha intentado crear una comunicación con la categoría {model.CategoriaID} que no tiene asignada.");
                    result.Errors = new[] { Txt.Comunicaciones.CategoriaNoPermitida };
                }
            }

            return(Json(result));
        }
Example #5
0
        public async Task <ActionResult> Modificar([DataSourceRequest] DataSourceRequest request, AplicacionGrid model)
        {
            DataSourceResult result = new[] { model }.ToDataSourceResult(request, ModelState);

            if (ModelState.IsValid)
            {
                try
                {
                    IAplicacionesServicio srv       = Servicios.AplicacionesServicio();
                    Aplicacion            modificar = srv.Get()
                                                      .SingleOrDefault(r => r.AplicacionID == model.AplicacionID);
                    if (modificar != null)
                    {
                        LoguearCambiosApiKey(modificar, model);
                        model.ActualizarEntidad(modificar);

                        ActualizarCaracteristicas(modificar, model.Caracteristicas);

                        await srv.ApplyChangesAsync();

                        if (Aplicacion.AplicacionID == modificar.AplicacionID)
                        {
                            Session["Aplicacion"]      = modificar;
                            Session["Caracteristicas"] = modificar.Caracteristicas
                                                         .Where(c => c.Activo)
                                                         .Select(c => (Dominio.Enums.AplicacionCaracteristica)c.AplicacionCaracteristicaID);
                        }

                        result = new[] { AplicacionGrid.FromEntity(modificar) }.ToDataSourceResult(request, ModelState);
                    }
                    else
                    {
                        result.Errors = new[] { string.Format(Txt.ErroresComunes.NoExiste, Txt.Aplicaciones.ArtEntidad).Frase() };
                    }
                }
                catch (SubdominioExisteException see)
                {
                    log.Error($"Error al modificar {Txt.Aplicaciones.ArtEntidad} con id {model.AplicacionID}. Usuario: {CurrentUserID()}", see);
                    result.Errors = new[] { string.Format(Txt.ErroresComunes.Modificar + see.Message, Txt.Aplicaciones.ArtEntidad).Frase() };
                }
                catch (AplicacionExisteException see)
                {
                    log.Error($"Error al modificar {Txt.Aplicaciones.ArtEntidad} con id {model.AplicacionID}. Usuario: {CurrentUserID()}", see);
                    result.Errors = new[] { string.Format(Txt.ErroresComunes.Modificar + see.Message, Txt.Aplicaciones.ArtEntidad).Frase() };
                }
                catch (Exception e)
                {
                    log.Error("Error al modificar " + Txt.Aplicaciones.ArtEntidad + " con id=" + model.AplicacionID, e);
                    result.Errors = new[] { string.Format(Txt.ErroresComunes.Modificar, Txt.Aplicaciones.ArtEntidad).Frase() };
                }
            }

            return(Json(result));
        }
Example #6
0
        public async Task <ActionResult> Nuevo([DataSourceRequest] DataSourceRequest request, UsuarioGrid usuario)
        {
            DataSourceResult result = new[] { usuario }.ToDataSourceResult(request, ModelState);

            if (ModelState.IsValid)
            {
                bool usuarioActualizado = false;
                try
                {
                    IAplicacionesServicio apSrv  = Servicios.AplicacionesServicio();
                    ICategoriasServicio   carSrv = Servicios.CategoriasServicio();
                    IUsuariosServicio     empSrv = Servicios.UsuariosServicio();
                    Usuario usuarioNuevo         = empSrv.Create();
                    usuario.ActualizarEntidad(usuarioNuevo);
                    usuarioNuevo.Aplicaciones = apSrv.Get(cl => usuario.Aplicaciones.Contains(cl.AplicacionID)).ToList();
                    IdentityResult ir = await UserManager.CreateAsync(usuarioNuevo, usuario.Clave);

                    if (ir.Succeeded)
                    {
                        result             = new[] { UsuarioGrid.FromEntity(usuarioNuevo) }.ToDataSourceResult(request, ModelState);
                        usuarioActualizado = true;
                        await UserManager.EstablecerRol(usuarioNuevo, usuario.PerfilID);

                        result = new[] { UsuarioGrid.FromEntity(usuarioNuevo) }.ToDataSourceResult(request, ModelState);
                    }
                    else
                    {
                        foreach (var error in ir.Errors)
                        {
                            ModelState.AddModelError("", error);
                        }
                        result = new[] { usuario }.ToDataSourceResult(request, ModelState);
                    }
                }
                catch (Exception e)
                {
                    if (usuarioActualizado)
                    {
                        log.Error($"Error al establecer perfiles del usuario creado {usuario.Email}", e);
                        result.Errors = new[] { string.Format(Txt.Usuarios.ErrorEstablecerPerfiles, usuario.Email).Frase() };
                    }
                    else
                    {
                        log.Error("Error al añadir el usuario " + usuario.Nombre, e);
                        result.Errors = new[] { string.Format(Txt.ErroresComunes.Aniadir, Txt.Usuarios.ArtEntidad).Frase() };
                    }
                }
            }

            return(Json(result));
        }
Example #7
0
        public async Task <ActionResult> Nuevo([DataSourceRequest] DataSourceRequest request, AplicacionGrid model)
        {
            DataSourceResult result = new[] { model }.ToDataSourceResult(request, ModelState);

            if (ModelState.IsValid)
            {
                try
                {
                    IAplicacionesServicio srv   = Servicios.AplicacionesServicio();
                    Aplicacion            nueva = srv.Create();
                    model.ActualizarEntidad(nueva);
                    if (model.Caracteristicas != null && model.Caracteristicas.Any())
                    {
                        IAplicacionesCaracteristicasServicio acSrv = Servicios.AplicacionesCaracteristicasServicio();
                        nueva.Caracteristicas.AddRange(acSrv.Get(ca => model.Caracteristicas.Contains(ca.AplicacionCaracteristicaID)));
                    }
                    srv.Insert(nueva);
                    await srv.ApplyChangesAsync();

                    result = new[] { AplicacionGrid.FromEntity(nueva) }.ToDataSourceResult(request, ModelState);
                }
                catch (SubdominioExisteException see)
                {
                    log.Error($"Error al añadir {Txt.Aplicaciones.ArtEntidad}. Usuario: {CurrentUserID()}", see);
                    result.Errors = new[] { string.Format(Txt.ErroresComunes.Modificar + see.Message, Txt.Aplicaciones.ArtEntidad).Frase() };
                }
                catch (AplicacionExisteException see)
                {
                    log.Error($"Error al modificar {Txt.Aplicaciones.ArtEntidad}. Usuario: {CurrentUserID()}", see);
                    result.Errors = new[] { string.Format(Txt.ErroresComunes.Modificar + see.Message, Txt.Aplicaciones.ArtEntidad).Frase() };
                }
                catch (Exception e)
                {
                    log.Error("Error al añadir " + Txt.Aplicaciones.ArtEntidad + " " + model.Nombre, e);
                    result.Errors = new[] { string.Format(Txt.ErroresComunes.Aniadir, Txt.Aplicaciones.ArtEntidad).Frase() };
                }
            }

            return(Json(result));
        }
Example #8
0
        public async Task <ActionResult> CrearModificar(ComunicacionGrid model)
        {
            object result;

            try
            {
                if (ModelState.IsValid)
                {
                    // Validar la categoría escogida por el usuario
                    if (CategoriaPermitida(model.CategoriaID))
                    {
                        IAplicacionesServicio appSrv = Servicios.AplicacionesServicio();
                        Aplicacion            app    = appSrv.GetSingle(c => c.AplicacionID == Aplicacion.AplicacionID);
                        bool mantenerUbicacion       = app.Caracteristicas.Any(c => c.Nombre == "GeoPosicionamiento");
                        var  srv = Servicios.ComunicacionesServicio();
                        if (model.ComunicacionID != 0)
                        {
                            var modificar = srv.GetSingle(p => p.ComunicacionID == model.ComunicacionID);
                            if (modificar != null)
                            {
                                // Verificar que el usuario está autorizado a gestionar la comunicación,
                                // por la categoría original a la que pertenece.
                                if (CategoriaPermitida(modificar.CategoriaID))
                                {
                                    // Guardar en variables aparte los ids de adjunto e imagen, por si hay que
                                    // eliminarlos.
                                    long?documentoEliminar = null, imagenEliminar = null;
                                    if (model.AdjuntoDocumentoID == null)
                                    {
                                        documentoEliminar = modificar.AdjuntoDocumentoID;
                                    }
                                    if (model.ImagenDocumentoID == null)
                                    {
                                        imagenEliminar = modificar.ImagenDocumentoID;
                                    }
                                    model.ActualizarEntidad(modificar, mantenerUbicacion);
                                    await srv.ApplyChangesAsync();

                                    result = ComunicacionGrid.FromEntity(modificar, CategoriasPermitidasIds, PeriodoEnvioPushHoras);

                                    // La eliminación de documentos (registro de la tabla Documentos y fichero de
                                    // disco) se realiza después de haber actualizado la comunicación (poner FK a
                                    // null) para garantizar que la comunicación se actualiza aunque falle la
                                    // la eliminación en disco. Si hubiera fallos, quedaría el registro de documento
                                    // sin ninguna comunicación que lo enlace, así como el archivo en disco.
                                    if (documentoEliminar.HasValue)
                                    {
                                        try
                                        {
                                            await FileManager.EliminarDocumento(documentoEliminar.Value);
                                        }
                                        catch (Exception e)
                                        {
                                            log.Error($"Error al eliminar documento {documentoEliminar.Value} durante la modificación de su comunicación asociada.", e);
                                        }
                                    }
                                    if (imagenEliminar.HasValue)
                                    {
                                        try
                                        {
                                            await FileManager.EliminarDocumento(imagenEliminar.Value);
                                        }
                                        catch (Exception e)
                                        {
                                            log.Error($"Error al eliminar imagen {imagenEliminar.Value} durante la modificación de su comunicación asociada.", e);
                                        }
                                    }
                                }
                                else
                                {
                                    result = new
                                    {
                                        Errors = new[]
                                        {
                                            string.Format(Txt.Comunicaciones.ModificacionDenegadaPorCategoria, modificar.Categoria.Nombre)
                                        }
                                    };
                                }
                            }
                            else
                            {
                                result = new
                                {
                                    Errors = new[]
                                    {
                                        string.Format(Txt.ErroresComunes.NoExiste, Txt.Comunicaciones.ArtEntidad).Frase()
                                    }
                                };
                            }
                        }
                        else
                        {
                            var nuevo = srv.Create();
                            model.ActualizarEntidad(nuevo, mantenerUbicacion);
                            nuevo.UsuarioID   = CurrentUserID();
                            nuevo.Instantanea = model.FechaPublicacion < DateTime.Now;
                            srv.Insert(nuevo);
                            await srv.ApplyChangesAsync();

                            result = ComunicacionGrid.FromEntity(nuevo, CategoriasPermitidasIds, PeriodoEnvioPushHoras);
                            if (nuevo.Instantanea)
                            {
                                if (EnviarPush(nuevo))
                                {
                                    nuevo.PushEnviada = true;
                                    nuevo.PushFecha   = DateTime.Now;
                                    await srv.ApplyChangesAsync();
                                }
                                else
                                {
                                    nuevo.Instantanea = false;
                                    await srv.ApplyChangesAsync();
                                }
                            }
                        }
                    }
                    else
                    {
                        log.Warn($"El usuario {Usuario.Nombre} ({Usuario.UsuarioID}) ha intentado crear o modificar una comunicación estableciendo la categoría {model.CategoriaID} que no tiene asignada.");
                        result = new { Errors = new[] { Txt.Comunicaciones.CategoriaNoPermitida } };
                    }
                }
                else
                {
                    // TODO: Serializar a result.Errors los errores del modelo.
                    result = new { Errors = new[] { "Los datos de la comunicación no son válidos. " } };
                }
            }
            catch (Exception e)
            {
                string accion = model.ComunicacionID != 0 ? "modificar" : "añadir";
                log.Error($"Error al {accion} la comunicación.", e);
                result = new { Errors = new[] { string.Format(Txt.ErroresComunes.Aniadir, Txt.Comunicaciones.ArtEntidad).Frase() } };
            }

            return(Json(result));
        }
Example #9
0
        public async Task <ActionResult> Modificar([DataSourceRequest] DataSourceRequest request, ComunicacionGrid model)
        {
            DataSourceResult result = new[] { model }.ToDataSourceResult(request, ModelState);

            if (ModelState.IsValid)
            {
                // Validar la categoría escogida por el usuario
                if (CategoriaPermitida(model.CategoriaID))
                {
                    try
                    {
                        IAplicacionesServicio appSrv = Servicios.AplicacionesServicio();
                        Aplicacion            app    = appSrv.GetSingle(c => c.AplicacionID == Aplicacion.AplicacionID);
                        bool mantenerUbicacion       = app.Caracteristicas.Any(c => c.Nombre == "GeoPosicionamiento");
                        var  srv       = Servicios.ComunicacionesServicio();
                        var  modificar = srv.GetSingle(p => p.ComunicacionID == model.ComunicacionID);
                        if (modificar != null)
                        {
                            // Si el usuario que edita la comunicación no tiene limitadas las categorías o
                            // bien tiene asignada la que tenía la comunicación originalmente y es una
                            // categoría activa, se permite la modificación.
                            if (CategoriaPermitida(modificar.CategoriaID))
                            {
                                // Guardar en variables aparte los ids de adjunto e imagen, por si hay que
                                // eliminarlos.
                                long?documentoEliminar = null, imagenEliminar = null;
                                if (model.AdjuntoDocumentoID == null)
                                {
                                    documentoEliminar = modificar.AdjuntoDocumentoID;
                                }
                                if (model.ImagenDocumentoID == null)
                                {
                                    imagenEliminar = modificar.ImagenDocumentoID;
                                }
                                model.ActualizarEntidad(modificar, mantenerUbicacion);
                                await srv.ApplyChangesAsync();

                                result = new[]
                                {
                                    ComunicacionGrid.FromEntity(modificar, CategoriasPermitidasIds, PeriodoEnvioPushHoras)
                                }.ToDataSourceResult(request, ModelState);

                                // La eliminación de documentos (registro de la tabla Documentos y fichero de
                                // disco) se realiza después de haber actualizado la comunicación (poner FK a
                                // null) para garantizar que la comunicación se actualiza aunque falle la
                                // la eliminación en disco. Si hubiera fallos, quedaría el registro de documento
                                // sin ninguna comunicación que lo enlace, así como el archivo en disco.
                                if (documentoEliminar.HasValue)
                                {
                                    try
                                    {
                                        await FileManager.EliminarDocumento(documentoEliminar.Value);
                                    }
                                    catch (Exception e)
                                    {
                                        log.Error($"Error al eliminar documento {documentoEliminar.Value} durante la modificación de su comunicación asociada.", e);
                                    }
                                }
                                if (imagenEliminar.HasValue)
                                {
                                    try
                                    {
                                        await FileManager.EliminarDocumento(imagenEliminar.Value);
                                    }
                                    catch (Exception e)
                                    {
                                        log.Error($"Error al eliminar imagen {imagenEliminar.Value} durante la modificación de su comunicación asociada.", e);
                                    }
                                }
                            }
                            else
                            {
                                result.Errors = new[] { string.Format(Txt.Comunicaciones.ModificacionDenegadaPorCategoria, modificar.Categoria.Nombre) };
                            }
                        }
                        else
                        {
                            result.Errors = new[] { string.Format(Txt.ErroresComunes.NoExiste, Txt.Comunicaciones.ArtEntidad).Frase() };
                        }
                    }
                    catch (Exception e)
                    {
                        log.Error("Error al modificar la comunicación con id=" + model.ComunicacionID, e);
                        result.Errors = new[] { string.Format(Txt.ErroresComunes.Modificar, Txt.Comunicaciones.ArtEntidad).Frase() };
                    }
                }
                else
                {
                    log.Warn($"El usuario {Usuario.Nombre} ({Usuario.UsuarioID}) ha intentado modificar la comunicación {model.ComunicacionID} con la categoría {model.CategoriaID} que no tiene asignada.");
                    result.Errors = new[] { Txt.Comunicaciones.CategoriaNoPermitida };
                }
            }

            return(Json(result));
        }
Example #10
0
        public async Task <ActionResult> Modificar([DataSourceRequest] DataSourceRequest request,
                                                   UsuarioGrid usuario)
        {
            DataSourceResult result = new[] { usuario }.ToDataSourceResult(request, ModelState);

            if (ModelState.IsValid)
            {
                bool usuarioActualizado = false;
                try
                {
                    IUsuariosServicio srv       = Servicios.UsuariosServicio();
                    Usuario           modificar = srv.GetSingle(u => u.UsuarioID == usuario.UsuarioID);
                    if (modificar != null)
                    {
                        if (usuario.Aplicaciones == null)
                        {
                            usuario.Aplicaciones = new long[0];
                        }
                        usuario.ActualizarEntidad(modificar);

                        IEnumerable <long> aplicacionesActuales   = modificar.Aplicaciones.Select(cl => cl.AplicacionID);
                        IEnumerable <long> aplicacionesAniadirIDs = usuario.Aplicaciones.Where(cl => !aplicacionesActuales.Contains(cl));
                        IEnumerable <long> aplicacionesEliminar   = aplicacionesActuales
                                                                    .Where(e => !usuario.Aplicaciones.Contains(e)).ToArray();
                        foreach (var e in aplicacionesEliminar)
                        {
                            Aplicacion aEliminar = modificar.Aplicaciones
                                                   .Single(eID => eID.AplicacionID == e);
                            modificar.Aplicaciones.Remove(aEliminar);
                        }

                        // Añadir las aplicaciones que vengan en el array de ids de aplicaciones y que no
                        // tenga ya el usuario.
                        IAplicacionesServicio srvAplicacions = Servicios.AplicacionesServicio();
                        modificar.Aplicaciones
                        .AddRange(srvAplicacions.Get(cl => aplicacionesAniadirIDs.Contains(cl.AplicacionID)));

                        IdentityResult ir = await UserManager.UpdateAsync(modificar);

                        if (ir.Succeeded)
                        {
                            usuarioActualizado = true;
                            await UserManager.EstablecerRol(modificar, usuario.PerfilID);

                            result = new[] { UsuarioGrid.FromEntity(modificar) }.ToDataSourceResult(request, ModelState);
                        }
                        else
                        {
                            foreach (var error in ir.Errors)
                            {
                                ModelState.AddModelError("", error);
                            }
                            result = new[] { usuario }.ToDataSourceResult(request, ModelState);
                        }
                    }
                    else
                    {
                        result.Errors = new[] { string.Format(Txt.ErroresComunes.NoExiste, Txt.Usuarios.ArtEntidad).Frase() };
                    }
                }
                catch (Exception e)
                {
                    if (usuarioActualizado)
                    {
                        log.Error($"Error al establecer perfiles del usuario creado {usuario.Email}", e);
                        result.Errors = new[] { string.Format(Txt.Usuarios.ErrorEstablecerPerfiles, usuario.Email).Frase() };
                    }
                    else
                    {
                        log.Error("Error al modificar el usuario con id=" + usuario.UsuarioID, e);
                        result.Errors = new[] { string.Format(Txt.ErroresComunes.Modificar, Txt.Usuarios.ArtEntidad).Frase() };
                    }
                }
            }

            return(Json(result));
        }