示例#1
0
        private SignInStatus verificaLdap(string login, string password, string dominio)
        {
            SignInStatus ret = SignInStatus.Failure;

            if ((dominio.ToLower() == "educa.aragon.es") || (dominio.ToLower() == "salud.aragon.es") || (dominio.ToLower() == "aragon.es"))
            {
                LdapConnection ldapConnection = new LdapConnection(new LdapDirectoryIdentifier(WebConfigurationManager.AppSettings["ServidorLDAP"],
                                                                                               Convert.ToInt32(WebConfigurationManager.AppSettings["PuertoLDAP"])));
                try
                {
                    ldapConnection.AuthType = AuthType.Basic;
                    ldapConnection.Bind(new NetworkCredential("uid=" + login + ",ou=people,o=" + dominio + ",o=isp", password));



                    ret = SignInStatus.Success;
                }
                catch (Exception ex)
                {
                    if ((!ex.Message.Contains("La credencial proporcionada no es válida")) && !(ex.Message.Contains("The supplied credential is invalid")))
                    {
                        logger.Fatal("VerificaLdap. Error: " + ex.Message + " " + ex.InnerException);
                        Notificaciones.NotifySystemOps(ex);
                    }
                    return(SignInStatus.Failure);
                }

                return(ret);
            }
            else
            {
                logger.Info("VerificaLdap. Dominio no válido: " + dominio);
                return(SignInStatus.Failure);
            }
        }
示例#2
0
    protected void btnAccDeshacerCambio_Click(object sender, EventArgs e)
    {
        int iObjetivoId = Convert.ToInt32(this.hdObjetivoId.Value);

        using (Entities c = new Entities())
        {
            try
            {
                ACCION obj = c.CONTENIDO.OfType <ACCION>().Where(o => o.CONTENIDO_ID == iObjetivoId).FirstOrDefault();

                if (obj.TIPO_CAMBIO_CONTENIDO_ID != TIPO_CAMBIO_CONTENIDO.SIN_CAMBIOS)
                {
                    obj.DeshacerCambio(c);
                    SuccessMessage         = "Los cambios pendientes del Objetivo se han cancelado.";
                    successMessage.Visible = true;
                }
                else
                {
                    ErrorMessage         = "No hay ningún cambio que deshacer.";
                    errorMessage.Visible = true;
                }
            }
            catch (Exception ex)
            {
                logger.Fatal("Error al deshacer cambios en Objetivo. Error: " + ex.Message + " " + ex.InnerException);
                Notificaciones.NotifySystemOps(ex);
                ErrorMessage         = "Error al deshacer los cambios del Objetivo.";
                errorMessage.Visible = true;
            }
        }
    }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                using (Entities c = new Entities())
                {
                    try {
                        if (Request["id"] == null)
                        {
                            Response.Redirect("VerDepartamentos.aspx", false);
                        }
                        else
                        {
                            DEPARTAMENTO d = c.DEPARTAMENTO.Find(Convert.ToInt32(Request["id"]));
                            this.lblDepartamento.Text = d.DESCRIPCION;
                            this.lblDpto.Text         = d.DESCRIPCION;

                            Page.Title           = "Plan de Gobierno del Departamento de " + d.DESCRIPCION + " | Transparencia Arag&oacute;n";
                            Page.MetaKeywords    = d.DESCRIPCION + ",plan de gobierno,transparencia, aragon, gobierno abierto";
                            Page.MetaDescription = "Plan de Gobierno del Departamento de " + d.DESCRIPCION + " del Gobierno de Aragón";
                        }
                    }
                    catch (Exception ex)
                    {
                        logger.Error("Error en DetalleDepartamento.aspx. Error: " + ex.Message + " " + ex.InnerException);
                        Notificaciones.NotifySystemOps(ex);
                    }
                }
            }
        }
示例#4
0
    protected void btnEliminaAcc_Click(object sender, EventArgs e)
    {
        if (!String.IsNullOrEmpty(Request["__EVENTARGUMENT"]))
        {
            using (Entities c = new Entities())
            {
                try
                {
                    int    id       = Convert.ToInt32(Request["__EVENTARGUMENT"]);
                    int    iDeptoId = getDptoId();
                    ACCION acc      = c.CONTENIDO.OfType <ACCION>().SingleOrDefault(x => x.CONTENIDO_ID == id);

                    if (acc.TieneAcceso(User.Identity.GetUserId()))
                    {
                        if (acc.YaPublicado())
                        {
                            //Marcamos el cambio como eliminación
                            acc.FECHA_MODIFICACION            = DateTime.Now;
                            acc.AUTOR_MODIFICACION_USUARIO_ID = User.Identity.GetUserId().ToString();
                            acc.TIPO_CAMBIO_CONTENIDO_ID      = TIPO_CAMBIO_CONTENIDO.ELIMINADO;
                            acc.ESTADO_VALIDACION_ID          = ESTADOS_VALIDACION.PDTE_VALIDAR;

                            c.CONTENIDO.Attach(acc);
                            c.Entry(acc).State = EntityState.Modified;
                            c.SaveChanges();

                            SuccessMessage         = "Instrumento/actividad marcado para eliminación (se eliminará en la validación).";
                            successMessage.Visible = true;
                        }
                        else
                        {
                            //Si todavía no ha sido publicado lo eliminamos
                            c.CONTENIDO.Remove(acc);
                            c.SaveChanges();
                            Response.Redirect("AdminPlan?id=" + iDeptoId.ToString() + "&m=" + "Instrumento/actividad eliminado correctamente.", false);
                        }
                    }
                    else
                    {
                        logger.Info("Acceso - AdminPlan.aspx Usuario: " + User.Identity.GetUserId() + " sin permiso de modificación en Acción: " + id.ToString());
                    }
                }
                catch (Exception ex)
                {
                    ErrorMessage         = "Error al eliminar el instrumento/actividad.";
                    errorMessage.Visible = true;
                    logger.Error("ERROR: AdminPlan.aspx Error al eliminar accion " + Request["__EVENTARGUMENT"] + ". Error: " + ex.Message + " " + ex.InnerException);
                    Notificaciones.NotifySystemOps(ex);
                }
            }
        }
    }
示例#5
0
    /// <summary>
    /// Añade Objetivo
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnAdd_Click(object sender, EventArgs e)
    {
        if (ModelState.IsValid)
        {
            if ((!String.IsNullOrEmpty(this.ObjetivoEstrategicoPV.Text)))
            {
                int iDeptoId = getDptoId();
                using (Entities c = new Entities())
                {
                    OBJETIVO obj = new OBJETIVO
                    {
                        AUTOR_CREACION_USUARIO_ID     = User.Identity.GetUserId().ToString(),
                        DEPARTAMENTO_ID               = iDeptoId,
                        ESTADO_VALIDACION_ID          = ESTADOS_VALIDACION.PDTE_VALIDAR,
                        FECHA_CREACION                = DateTime.Now,
                        OBJETIVO_ESTRATEGICO_PDTE_VAL = this.ObjetivoEstrategicoPV.Text.Trim(),
                        TIPO_CAMBIO_CONTENIDO_ID      = TIPO_CAMBIO_CONTENIDO.ALTA,
                        VISIBLE = false
                    };



                    c.CONTENIDO.Add(obj);
                    try
                    {
                        c.SaveChanges();
                        SuccessMessage         = "Objetivo guardado correctamente.";
                        successMessage.Visible = true;
                    }
                    catch (Exception ex)
                    {
                        logger.Fatal("Error al crear nuevo objetivo (AdminPlan.aspx). Error: " + ex.Message + " " + ex.InnerException);
                        Notificaciones.NotifySystemOps(ex);
                        ErrorMessage         = "Error al crear nuevo objetivo.";
                        errorMessage.Visible = true;
                    }
                }
            }
            else
            {
                ErrorMessage         = "Se deben rellenar los campos del formulario.";
                errorMessage.Visible = true;
            }
        }
        else
        {
            ErrorMessage         = "Se deben rellenar los campos del formulario.";
            errorMessage.Visible = true;
        }
    }
示例#6
0
    protected int getDptoId()
    {
        int?iDptoId = null;

        if ((User.IsInRole(AspNetRoles.ADMINISTRADOR)) || (User.IsInRole(AspNetRoles.VALIDADOR)))
        {
            if (Request["id"] == null)
            {
                Response.Redirect("../Default.aspx", false);
            }
            iDptoId = Convert.ToInt32(Request["id"]);
        }
        else
        {
            //Usuario  (accede sólo a los datos de su departamento)
            using (Entities c = new Entities())
            {
                try
                {
                    iDptoId = c.USUARIOS.Find(User.Identity.GetUserId().ToString()).DEPARTAMENTOID;
                    if (Request["id"] == null)
                    {
                        Response.Redirect("AdminPlan.aspx?id=" + iDptoId, false);
                    }
                }
                catch (Exception ex)
                {
                    logger.Warn("Error en AdminPlan.aspx. Error: " + ex.Message + " " + ex.InnerException);
                    Notificaciones.NotifySystemOps(ex);
                    Response.Redirect("../Default.aspx", true);
                }
            }
        }
        if (iDptoId.HasValue)
        {
            return(iDptoId.Value);
        }
        else
        {
            logger.Error("Usuario sin permisos. Error en AdminPlan.aspx.");
            Response.Redirect("../Default.aspx", true);
            return(-1);
        }
    }
示例#7
0
    protected void btnEliminaUserDep_Click(object sender, EventArgs e)
    {
        if (!String.IsNullOrEmpty(Request["__EVENTARGUMENT"]))
        {
            using (Entities c = new Entities())
            {
                try
                {
                    string id = (Request["__EVENTARGUMENT"]);

                    USUARIOS usuario = c.USUARIOS.Find(id);

                    usuario.DEPARTAMENTOID = null;
                    c.USUARIOS.Attach(usuario);
                    c.Entry(usuario).State = EntityState.Modified;
                    c.SaveChanges();

                    SuccessMessage         = "Usuario eliminado correctamente.";
                    successMessage.Visible = true;
                    logger.Info("Usuario: " + usuario.USUARIOID + " desasignado del dpto: " + Convert.ToInt32(Request["id"]));

                    //No eliminamos el usuario porque tendrá seguramente información asociada de contenido (autor...), le desasignamos el departamento

                    /*c.USUARIOS.Remove(u);
                     * AspNetUsers anu = c.AspNetUsers.Find(id);
                     * c.AspNetUsers.Remove(anu);
                     * c.SaveChanges();
                     * Response.Redirect("AdmUsuariosDep?id=" + Request["id"] + "&m=" + "Usuario eliminado correctamente.", false);*/
                }
                catch (Exception ex)
                {
                    ErrorMessage         = "Error al eliminar el usuario.";
                    errorMessage.Visible = true;
                    logger.Error("ERROR: AdmnUsuariosDep.aspx Error al eliminar usuario " + Request["__EVENTARGUMENT"] + ". Error: " + ex.Message + " " + ex.InnerException);
                    Notificaciones.NotifySystemOps(ex);
                }
            }
        }
    }
示例#8
0
    //***********************************************************************************************EXPORTACION******************************

    #region ExportacionListados

    //protected void btnImprimirInforme_Click(object sender, EventArgs e)
    //{
    //    try
    //    {
    //        InformeDepartamento inf = new InformeDepartamento();
    //        Document doc = inf.genera();

    //        System.IO.MemoryStream ms = new System.IO.MemoryStream();
    //        //iTextSharp.text.Document doc = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4, 30f, 30f, 30f, 30f);
    //        //iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(doc, ms);



    //        //Response.Clear();
    //        //Response.ContentType = "application/pdf";
    //        //Response.AddHeader("Content-Disposition",
    //        //    "attachment;filename=\"Plan_de_Gobierno.pdf\"");
    //        //Response.Cache.SetCacheability(HttpCacheability.NoCache);

    //        //Response.BinaryWrite(ms.ToArray());

    //        //Response.Flush();

    //        //Response.End();



    //        using (PdfWriter writer = PdfWriter.GetInstance(doc, ms))
    //        {
    //            /*doc.Open();
    //            document.Add(new Paragraph("Hello World"));
    //            document.Close();*/
    //            writer.Close();
    //            ms.Close();
    //            Response.ContentType = "pdf/application";
    //            Response.AddHeader("content-disposition", "attachment;filename=First_PDF_document.pdf");
    //            Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
    //        }

    //    }
    //    catch (Exception ex)
    //    {
    //        //TODO*************
    //    }
    //}


    protected void InformeExcel(int iDptoId)
    {
        try
        {
            System.IO.MemoryStream stream;

            //using (Entities c = new Entities())
            {
                //DEPARTAMENTO dep = c.DEPARTAMENTO.Find(iDptoId);

                //DataTable tabla = Utils.ToDataTable<CONTENIDO>(dep.CONTENIDO.ToList());

                stream = new System.IO.MemoryStream();

                using (SpreadsheetDocument document = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook, true))
                {
                    WorkbookPart workbookPart = document.AddWorkbookPart();
                    workbookPart.Workbook = new Workbook();

                    WorksheetPart worksheetPart = workbookPart.AddNewPart <WorksheetPart>();
                    MergeCells    mergeCells;

                    var sheetData = InformesExcel.HojaExcelInforme(iDptoId, null, false, out mergeCells);

                    //Añadimos ahora las columnas para poder asignarles el ancho personalizado:
                    Columns columns = InformesExcel.SizesInformeDepartamento(sheetData);

                    worksheetPart.Worksheet = new Worksheet();
                    worksheetPart.Worksheet.Append(columns);
                    worksheetPart.Worksheet.Append(sheetData);

                    Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());
                    Sheet  sheet  = new Sheet()
                    {
                        Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Plan de Gobierno - " + DateTime.Now.ToShortDateString().Replace("/", "-")
                    };
                    //añadimos las celdas combinadas
                    worksheetPart.Worksheet.InsertAfter(mergeCells, worksheetPart.Worksheet.Elements <SheetData>().First());
                    sheets.Append(sheet);


                    //Añadimos la pestaña con cambios pendientes de validar
                    MergeCells mergeCellsPV;
                    SheetData  sheetDataPV = InformesExcel.HojaExcelInforme(iDptoId, null, true, out mergeCellsPV);

                    WorksheetPart worksheetPartPV = workbookPart.AddNewPart <WorksheetPart>();
                    Worksheet     workSheetPV     = new Worksheet();

                    //Añadimos ahora las columnas para poder asignarles el ancho personalizado:
                    Columns columnsPV = InformesExcel.SizesInformeDepartamento(sheetDataPV);

                    worksheetPartPV.Worksheet = new Worksheet();
                    worksheetPartPV.Worksheet.Append(columnsPV);
                    worksheetPartPV.Worksheet.Append(sheetDataPV);

                    Sheet sheetPV = new Sheet()
                    {
                        Id = workbookPart.GetIdOfPart(worksheetPartPV), SheetId = 2, Name = "P.G. (sin validar) - " + DateTime.Now.ToShortDateString().Replace("/", "-")
                    };
                    //añadimos las celdas combinadas
                    worksheetPartPV.Worksheet.InsertAfter(mergeCellsPV, worksheetPartPV.Worksheet.Elements <SheetData>().First());
                    sheets.Append(sheetPV);

                    //fin pestaña de cambios pendientes de validar


                    WorkbookStylesPart stylesPart = document.WorkbookPart.AddNewPart <WorkbookStylesPart>();
                    stylesPart.Stylesheet = InformesExcel.GenerateStyleSheet();
                    stylesPart.Stylesheet.Save();
                    worksheetPart.Worksheet.Save();
                    //fin nuevo

                    workbookPart.Workbook.Save();
                }
            }


            stream.Flush();
            stream.Position = 0;

            Response.ClearContent();
            Response.Clear();
            Response.Buffer  = true;
            Response.Charset = "";

            Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
            Response.AddHeader("content-disposition", "attachment; filename=Plan_de_Gobierno_" + DateTime.Now.ToShortDateString().Replace("/", "-") + ".xlsx");
            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            byte[] data1 = new byte[stream.Length];
            stream.Read(data1, 0, data1.Length);
            stream.Close();
            Response.BinaryWrite(data1);
            //Response.Flush();

            //  Feb2015: Needed to replace "Response.End();" with the following 3 lines, to make sure the Excel was fully written to the Response
            System.Web.HttpContext.Current.Response.Flush();
            System.Web.HttpContext.Current.Response.SuppressContent = true;
            System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest();
            //Response.End();
        }
        catch (Exception ex)
        {
            logger.Error("Error al imprimir informe excel departamento (InformeExcel). Dpto: " + iDptoId + " Error: " + ex.Message + " " + ex.InnerException);
            Notificaciones.NotifySystemOps(ex, "Error al imprimir informe excel departamento (InformeExcel). Dpto: " + iDptoId);

            ErrorMessage         = "Error al crear el informe.";
            errorMessage.Visible = true;
        }
    }
示例#9
0
    /// <summary>
    /// Actualiza Objetivo
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnActualizaAcc_Click(object sender, EventArgs e)
    {
        if (ModelState.IsValid)
        {
            int iObjetivoId = Convert.ToInt32(this.hdObjetivoId.Value);
            using (Entities c = new Entities())
            {
                try
                {
                    ACCION obj = c.CONTENIDO.OfType <ACCION>().Where(o => o.CONTENIDO_ID == iObjetivoId).FirstOrDefault();

                    bool bHayCambios = false;

                    if (String.IsNullOrEmpty(obj.INSTRUMENTOS_ACT_PDTE_VAL))
                    {
                        bHayCambios = true;
                    }
                    else if (
                        obj.INSTRUMENTOS_ACT_PDTE_VAL.Trim() != this.txtInstrumentosAct.Text.Trim() ||
                        obj.SEGUIMIENTO_PDTE_VAL.Trim() != this.txtSeguimiento.Text.Trim() ||
                        obj.RECURSOS_HUMANOS_PDTE_VAL.Trim() != this.txtRecursosHumanos.Text.Trim() ||
                        obj.COSTE_ECONOMICO_PDTE_VAL.Trim() != this.txtCosteEconomico.Text.Trim() ||
                        obj.INDICADOR_SEGUIMIENTO_PDTE_VAL.Trim() != this.txtIndSeguimiento.Text.Trim() ||
                        obj.TEMPORALIDAD_PDTE_VAL.Trim() != this.txtTemporalidad.Text.Trim() ||
                        obj.INDICADOR_SEGUIMIENTO_PDTE_VAL.Trim() != this.txtIndSeguimiento.Text.Trim() ||
                        //obj.ESTADO_SEGUIMIENTO_ID_PDTE_VAL.ToString() != this.ddlEstadoSeguimiento.SelectedItem.Value ||
                        obj.PORCENTAJE_AVANCE_PDTE_VAL.ToString() != this.ddlPorcentajeAvance.SelectedItem.Value ||
                        obj.ORGANO_RESPONSABLE_PDTE_VAL.Trim() != this.txtOrganoResponsable.Text.Trim()
                        )
                    {
                        bHayCambios = true;
                    }
                    else if (!String.IsNullOrEmpty(obj.MEDIOS_OTROS_PDTE_VAL))
                    {
                        if (obj.MEDIOS_OTROS_PDTE_VAL.Trim() != this.txtMediosOtros.Text.Trim())
                        {
                            bHayCambios = true;
                        }
                    }
                    else if (!String.IsNullOrEmpty(this.txtMediosOtros.Text.Trim()))
                    {
                        bHayCambios = true;
                    }

                    if (bHayCambios)
                    {
                        if (obj.YaPublicado())
                        {
                            obj.FECHA_MODIFICACION            = DateTime.Now;
                            obj.AUTOR_MODIFICACION_USUARIO_ID = User.Identity.GetUserId().ToString();
                            obj.TIPO_CAMBIO_CONTENIDO_ID      = TIPO_CAMBIO_CONTENIDO.MODIFICACION;
                        }
                        else
                        {
                            //Si todavía no ha sido publicado lo trataremos como un alta
                            obj.FECHA_CREACION            = DateTime.Now;
                            obj.AUTOR_CREACION_USUARIO_ID = User.Identity.GetUserId().ToString();
                            obj.TIPO_CAMBIO_CONTENIDO_ID  = TIPO_CAMBIO_CONTENIDO.ALTA;
                        }

                        obj.INSTRUMENTOS_ACT_PDTE_VAL      = this.txtInstrumentosAct.Text.Trim();
                        obj.SEGUIMIENTO_PDTE_VAL           = this.txtSeguimiento.Text.Trim();
                        obj.RECURSOS_HUMANOS_PDTE_VAL      = this.txtRecursosHumanos.Text.Trim();
                        obj.COSTE_ECONOMICO_PDTE_VAL       = this.txtCosteEconomico.Text.Trim();
                        obj.INDICADOR_SEGUIMIENTO_PDTE_VAL = this.txtIndSeguimiento.Text.Trim();
                        obj.MEDIOS_OTROS_PDTE_VAL          = this.txtMediosOtros.Text.Trim();
                        obj.TEMPORALIDAD_PDTE_VAL          = this.txtTemporalidad.Text.Trim();
                        obj.INDICADOR_SEGUIMIENTO_PDTE_VAL = this.txtIndSeguimiento.Text.Trim();
                        //if (this.ddlEstadoSeguimiento.SelectedItem.Value != "-1")
                        //    obj.ESTADO_SEGUIMIENTO_ID_PDTE_VAL = Convert.ToInt32(this.ddlEstadoSeguimiento.SelectedItem.Value);
                        if (this.ddlPorcentajeAvance.SelectedItem.Value != "-1")
                        {
                            obj.PORCENTAJE_AVANCE_PDTE_VAL = Convert.ToByte(this.ddlPorcentajeAvance.SelectedItem.Value);
                        }
                        obj.ORGANO_RESPONSABLE_PDTE_VAL = this.txtOrganoResponsable.Text.Trim();
                        obj.OBSERVACIONES        = this.txtAccObservaciones.Text.Trim();
                        obj.ESTADO_VALIDACION_ID = ESTADOS_VALIDACION.PDTE_VALIDAR;

                        c.CONTENIDO.Attach(obj);
                        c.Entry(obj).State = EntityState.Modified;
                        c.SaveChanges();

                        SuccessMessage         = "Instrumento/actividad actualizado correctamente.";
                        successMessage.Visible = true;
                    }
                    else
                    {
                        //no marcamos como cambio si actualizan observaciones
                        obj.OBSERVACIONES = this.txtAccObservaciones.Text.Trim();
                        c.CONTENIDO.Attach(obj);
                        c.Entry(obj).State = EntityState.Modified;
                        c.SaveChanges();
                        SuccessMessage         = "Instrumento/actividad actualizado correctamente.";
                        successMessage.Visible = true;
                    }
                }
                catch (Exception ex)
                {
                    logger.Fatal("Error al actualizar Instrumento/actividad (AdminPlan.aspx). Error: " + ex.Message + " " + ex.InnerException);
                    Notificaciones.NotifySystemOps(ex);
                    ErrorMessage         = "Error al actualizar nuevo Instrumento/actividad.";
                    errorMessage.Visible = true;
                }
            }
        }
        else
        {
            ErrorMessage         = "Se deben rellenar los campos del formulario.";
            errorMessage.Visible = true;
        }
    }
示例#10
0
    /// <summary>
    /// Actualiza Objetivo
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnActualiza_Click(object sender, EventArgs e)
    {
        if (ModelState.IsValid)
        {
            if ((!String.IsNullOrEmpty(this.ObjetivoEstrategicoPV.Text)))
            {
                int iObjetivoId = Convert.ToInt32(this.hdObjetivoIdEdit.Value);
                using (Entities c = new Entities())
                {
                    try
                    {
                        OBJETIVO obj = c.CONTENIDO.OfType <OBJETIVO>().Where(o => o.CONTENIDO_ID == iObjetivoId).FirstOrDefault();
                        if (obj.YaPublicado())
                        {
                            obj.FECHA_MODIFICACION            = DateTime.Now;
                            obj.AUTOR_MODIFICACION_USUARIO_ID = User.Identity.GetUserId().ToString();
                            obj.TIPO_CAMBIO_CONTENIDO_ID      = TIPO_CAMBIO_CONTENIDO.MODIFICACION;
                        }
                        else
                        {
                            //Si todavía no ha sido publicado lo trataremos como un alta
                            obj.FECHA_CREACION            = DateTime.Now;
                            obj.AUTOR_CREACION_USUARIO_ID = User.Identity.GetUserId().ToString();
                            obj.TIPO_CAMBIO_CONTENIDO_ID  = TIPO_CAMBIO_CONTENIDO.ALTA;
                        }

                        //Si hay cambios guardamos si no no, para no marcar como modificado
                        bool bHayCambios = false;

                        if (String.IsNullOrEmpty(obj.OBJETIVO_ESTRATEGICO_PDTE_VAL))
                        {
                            bHayCambios = true;
                        }
                        else if (obj.OBJETIVO_ESTRATEGICO_PDTE_VAL.Trim() != this.ObjetivoEstrategicoPV.Text.Trim())
                        {
                            bHayCambios = true;
                        }

                        if (bHayCambios)
                        {
                            obj.OBJETIVO_ESTRATEGICO_PDTE_VAL = this.ObjetivoEstrategicoPV.Text.Trim();
                            obj.ESTADO_VALIDACION_ID          = ESTADOS_VALIDACION.PDTE_VALIDAR;

                            c.CONTENIDO.Attach(obj);
                            c.Entry(obj).State = EntityState.Modified;
                            c.SaveChanges();

                            SuccessMessage         = "Objetivo actualizado correctamente.";
                            successMessage.Visible = true;
                        }
                    }
                    catch (Exception ex)
                    {
                        logger.Fatal("Error al actualizar objetivo (AdminPlan.aspx). Error: " + ex.Message + " " + ex.InnerException);
                        Notificaciones.NotifySystemOps(ex);
                        ErrorMessage         = "Error al actualizar nuevo objetivo.";
                        errorMessage.Visible = true;
                    }
                }
            }
            else
            {
                ErrorMessage         = "Se deben rellenar los campos del formulario.";
                errorMessage.Visible = true;
            }
        }
        else
        {
            ErrorMessage         = "Se deben rellenar los campos del formulario.";
            errorMessage.Visible = true;
        }
    }
示例#11
0
    protected void btnAddAcc_Click(object sender, EventArgs e)
    {
        if (ModelState.IsValid)
        {
            if ((!String.IsNullOrEmpty(this.txtInstrumentosAct.Text)) && (!String.IsNullOrEmpty(this.txtOrganoResponsable.Text)) &&
                (!String.IsNullOrEmpty(this.txtSeguimiento.Text)) && (!String.IsNullOrEmpty(this.txtRecursosHumanos.Text)) &&
                (!String.IsNullOrEmpty(this.txtCosteEconomico.Text)) &&
                (!String.IsNullOrEmpty(this.txtTemporalidad.Text)) && (!String.IsNullOrEmpty(this.txtIndSeguimiento.Text)) &&
                (this.ddlPorcentajeAvance.SelectedItem.Value != "-1"))
            //(this.ddlEstadoSeguimiento.SelectedItem.Value != "-1"))
            {
                int iDeptoId = getDptoId();
                using (Entities c = new Entities())
                {
                    try
                    {
                        ACCION obj = new ACCION
                        {
                            AUTOR_CREACION_USUARIO_ID = User.Identity.GetUserId().ToString(),
                            DEPARTAMENTO_ID           = iDeptoId,
                            ESTADO_VALIDACION_ID      = ESTADOS_VALIDACION.PDTE_VALIDAR,
                            FECHA_CREACION            = DateTime.Now,
                            TIPO_CAMBIO_CONTENIDO_ID  = TIPO_CAMBIO_CONTENIDO.ALTA,
                            VISIBLE = false,
                            SEGUIMIENTO_PDTE_VAL           = txtSeguimiento.Text.Trim(),
                            RECURSOS_HUMANOS_PDTE_VAL      = txtRecursosHumanos.Text.Trim(),
                            COSTE_ECONOMICO_PDTE_VAL       = txtCosteEconomico.Text.Trim(),
                            INSTRUMENTOS_ACT_PDTE_VAL      = txtInstrumentosAct.Text.Trim(),
                            MEDIOS_OTROS_PDTE_VAL          = txtMediosOtros.Text.Trim(),
                            TEMPORALIDAD_PDTE_VAL          = txtTemporalidad.Text.Trim(),
                            INDICADOR_SEGUIMIENTO_PDTE_VAL = txtIndSeguimiento.Text.Trim(),
                            //ESTADO_SEGUIMIENTO_ID_PDTE_VAL = Convert.ToInt32(this.ddlEstadoSeguimiento.SelectedItem.Value),
                            PORCENTAJE_AVANCE_PDTE_VAL  = Convert.ToByte(this.ddlPorcentajeAvance.SelectedItem.Value),
                            ORGANO_RESPONSABLE_PDTE_VAL = txtOrganoResponsable.Text.Trim(),
                            OBJETIVO_CONTENIDO_ID       = Convert.ToInt32(this.hdObjetivoId.Value),
                            OBSERVACIONES = txtAccObservaciones.Text.Trim()
                        };

                        c.CONTENIDO.Add(obj);

                        c.SaveChanges();
                        SuccessMessage         = "Instrumento/actividad guardado correctamente.";
                        successMessage.Visible = true;
                    }
                    catch (Exception ex)
                    {
                        logger.Error("Error al crear nuevo instrumento/actividad (AdminPlan.aspx). Error: " + ex.Message + " " + ex.InnerException);
                        Notificaciones.NotifySystemOps(ex);
                        ErrorMessage         = "Error al crear nueva acción.";
                        errorMessage.Visible = true;
                    }
                }
            }
            else
            {
                ErrorMessage         = "Se deben rellenar los campos del formulario.";
                errorMessage.Visible = true;
            }
        }
        else
        {
            ErrorMessage         = "Se deben rellenar los campos del formulario.";
            errorMessage.Visible = true;
        }
    }
示例#12
0
    protected void Page_Load()
    {
        if (Request["id"] == null)
        {
            Response.Redirect("AdminPlan.aspx?id=" + getDptoId().ToString(), true);
        }


        if (!IsPostBack)
        {
            int?iDptoId = null;

            iDptoId = getDptoId();

            //Comprobamos lo primero de todo que la entidad a administrar es la del usuario o es un administrador
            try
            {
                if (!User.IsInRole(AspNetRoles.ADMINISTRADOR) && !User.IsInRole(AspNetRoles.VALIDADOR))
                {
                    if (Request["id"] != null)
                    {
                        if (iDptoId != Convert.ToInt32(Request["id"]))
                        {
                            //No autorizado
                            logger.Info("No autorizado en AdminPlan.aspx. Usuario: " + User.Identity.GetUserId() + " Departamento: " + Request["id"]);
                            Response.Redirect("../Default.aspx", true);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Warn("Error en AdminPlan.aspx (2). Error: " + ex.Message + " " + ex.InnerException);
                Notificaciones.NotifySystemOps(ex);
                Response.Redirect("../Default.aspx", true);
            }

            using (Entities c = new Entities())
            {
                DEPARTAMENTO dep = c.DEPARTAMENTO.Find(iDptoId);
                if (dep != null)
                {
                    LEGISLATURA leg = c.LEGISLATURA.Find(dep.LEGISLATURA_ID);

                    if (!dep.VISIBLE)
                    {
                        if (!User.IsInRole(AspNetRoles.ADMINISTRADOR) && !User.IsInRole(AspNetRoles.VALIDADOR))
                        {
                            ////No se puede editar un departamento no visible
                            //logger.Info("Editando un departamento no visible. Usuario: " + User.Identity.GetUserId() + " Departamento: " + iDptoId);
                            //Response.Redirect("../Default.aspx", true);
                        }
                    }
                    else if (!leg.ACTUAL)
                    {
                        //if (!User.IsInRole(AspNetRoles.ADMINISTRADOR))
                        //{
                        //    logger.Info("Editando un departamento de una legislatura no actual. Usuario: " + User.Identity.GetUserId() + " Departamento: " + iDptoId);
                        //    Response.Redirect("../Default.aspx", true);
                        //}
                    }


                    //List<ESTADOS_SEGUIMIENTO> tipos = c.ESTADOS_SEGUIMIENTO.ToList();
                    //tipos.Add(new ESTADOS_SEGUIMIENTO() { ESTADO_SEGUIMIENTO_ID = -1, DESCRIPCION = "Seleccione..." });

                    //this.ddlEstadoSeguimiento.DataTextField = "DESCRIPCION";
                    //this.ddlEstadoSeguimiento.DataValueField = "ESTADO_SEGUIMIENTO_ID";
                    //this.ddlEstadoSeguimiento.DataSource = tipos;
                    //this.ddlEstadoSeguimiento.DataBind();
                    //this.ddlEstadoSeguimiento.ClearSelection();
                    //this.ddlEstadoSeguimiento.Items.FindByText("Seleccione...").Selected = true;


                    this.litLegislatura.Text = leg.DESCRIPCION;
                    this.litNombredDEP.Text  = dep.DESCRIPCION;
                    this.Title = dep.DESCRIPCION;
                }
                else
                {
                    logger.Info("El departamento no existe (Planes/AdminPlan.aspx).");
                    Response.Redirect("../Default.aspx", true);
                }
            }

            if (!String.IsNullOrEmpty(Request["e"]))
            {
                ErrorMessage         = Request["e"];
                errorMessage.Visible = true;
            }
            else if (!String.IsNullOrEmpty(Request["m"]))
            {
                SuccessMessage         = Request["m"];
                successMessage.Visible = true;
            }
            else
            {
                ErrorMessage           = "";
                errorMessage.Visible   = false;
                SuccessMessage         = "";
                successMessage.Visible = false;
            }
        }
    }
示例#13
0
        protected void LogIn(object sender, EventArgs e)
        {
            if (IsValid)
            {
                // Validar la contraseña del usuario
                var manager       = Context.GetOwinContext().GetUserManager <ApplicationUserManager>();
                var signinManager = Context.GetOwinContext().GetUserManager <ApplicationSignInManager>();



                try
                {
                    ApplicationUser au = manager.FindByEmail(Email.Text);

                    if (au != null)
                    {
                        //var userid = manager.FindByEmail(Email.Text).Id;
                        var userid = au.Id;
                        // Esto no cuenta los errores de inicio de sesión hacia el bloqueo de cuenta
                        // Para habilitar los errores de contraseña para desencadenar el bloqueo, cambie a shouldLockout: true
                        //var result = signinManager.PasswordSignIn(Email.Text, Password.Text, RememberMe.Checked, shouldLockout: true);  //descomentar para usar autenticación por BBDD

                        string[] login  = Email.Text.Split('@');
                        var      result = verificaLdap(login[0], Password.Text, login[1]);

                        //Comprobamos si es administrador o no
                        bool admin            = manager.GetRoles(userid).Contains("Administrador");
                        bool sSinDepartamento = false;

                        //Si no es admin comprobamos que el usuario tenga departamento, si no lo tiene no podrá entrar en la aplicación (estaría "eliminado")
                        if (!admin)
                        {
                            using (Entities c = new Entities())
                            {
                                try
                                {
                                    USUARIOS u = c.USUARIOS.Find(userid);
                                    if (!u.DEPARTAMENTOID.HasValue)
                                    {
                                        result           = SignInStatus.Failure;
                                        sSinDepartamento = true;
                                        logger.Info("Usuario sin departamento asociado: " + userid);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    logger.Warn("Error en AdminPlan.aspx. Error: " + ex.Message + " " + ex.InnerException);
                                    Notificaciones.NotifySystemOps(ex);
                                    Response.Redirect("../Default.aspx", true);
                                }
                            }
                        }

                        switch (result)
                        {
                        case SignInStatus.Success:
                            USUARIOS.setUltimoAcceso(userid);
                            signinManager.SignIn(au, false, RememberMe.Checked);
                            IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response, admin);
                            break;

                        case SignInStatus.LockedOut:
                            Response.Redirect("/Account/Lockout");
                            break;

                        case SignInStatus.RequiresVerification:
                            Response.Redirect(String.Format("/Account/TwoFactorAuthenticationSignIn?ReturnUrl={0}&RememberMe={1}",
                                                            Request.QueryString["ReturnUrl"],
                                                            RememberMe.Checked),
                                              true);
                            break;

                        case SignInStatus.Failure:
                        default:
                            if (!sSinDepartamento)
                            {
                                FailureText.Text = "Intento de inicio de sesión no válido";
                            }
                            else
                            {
                                FailureText.Text = "Usuario sin departamento asociado";
                            }
                            ErrorMessage.Visible = true;
                            break;
                        }
                    }
                    else
                    {
                        //No existe el usuario
                        FailureText.Text     = "Usuario y/o contraseña no válidos";
                        ErrorMessage.Visible = true;
                    }
                }
                catch (Exception ex)
                {
                    FailureText.Text     = "Usuario y/o contraseña no válidos.";
                    ErrorMessage.Visible = true;
                    logger.Fatal("Error en Login.aspx. Error: " + ex.Message + " " + ex.InnerException);
                    Notificaciones.NotifySystemOps(ex);
                }
            }
        }
示例#14
0
    protected void btnAddUserDep_Click(object sender, EventArgs e)
    {
        if (ModelState.IsValid)
        {
            if (this.txtCorreoUsuarioDep.Text.ToLower().EndsWith("aragon.es"))
            {
                var             manager       = Context.GetOwinContext().GetUserManager <ApplicationUserManager>();
                var             signInManager = Context.GetOwinContext().Get <ApplicationSignInManager>();
                ApplicationUser user          = null;
                USUARIOS        usuario       = null;

                //Comprobamos si existe el usuario sin departamento asociado:
                user = manager.FindByEmail(this.txtCorreoUsuarioDep.Text.Trim().ToLower());

                if (user != null)
                {//Existe el usuario de la aplicación
                    //Comprobamos si es administrador o no
                    bool admin = manager.GetRoles(user.Id).Contains("Administrador");

                    if (!admin)
                    {
                        //Comprobamos si existe el usuario en la tabla USUARIOS:
                        using (Entities c = new Entities())
                        {
                            usuario = c.USUARIOS.Find(user.Id);
                            if (usuario != null)
                            {
                                //Existe el usuario, simplemente le cambiamos el departamento asociado

                                usuario.NOMBRE         = this.txtNombreUsuarioDep.Text.Trim();
                                usuario.DEPARTAMENTOID = Convert.ToInt32(Request["id"]);
                                usuario.APELLIDOS      = this.txtApellidosUsuarioDep.Text.Trim();

                                c.USUARIOS.Attach(usuario);
                                c.Entry(usuario).State = EntityState.Modified;
                                c.SaveChanges();

                                SuccessMessage         = "El usuario existente se ha vinculado al departamento correctamente.";
                                successMessage.Visible = true;
                                logger.Info("Actualizado usuario: " + user.Id + " dpto: " + Convert.ToInt32(Request["id"]));
                            }
                            else
                            {
                                //No existe el usuario de la aplicación, lo creamos

                                USUARIOS u = new USUARIOS
                                {
                                    NOMBRE         = this.txtNombreUsuarioDep.Text.Trim(),
                                    APELLIDOS      = this.txtApellidosUsuarioDep.Text.Trim(),
                                    DEPARTAMENTOID = Convert.ToInt32(Request["id"]),
                                    FECHA_ALTA     = DateTime.Now,
                                    AspNetUsers    = c.AspNetUsers.Find(user.Id)
                                };
                                c.USUARIOS.Add(u);
                                c.SaveChanges();
                                SuccessMessage         = "Nuevo usuario creado correctamente";
                                successMessage.Visible = true;
                                errorMessage.Visible   = false;
                                LimpiaUsuarioDep();
                                logger.Info("Añadido usuario: " + user.Id + " dpto: " + Convert.ToInt32(Request["id"]));
                            }
                        }
                    }
                    else
                    {
                        ErrorMessage         = "Error al crear un nuevo usuario: no se puede añadir ya que es un usuario administrador existente.";
                        errorMessage.Visible = true;
                    }
                }
                else
                {
                    //No existe ni usuario de aplicación ni info en USUARIOS, creamos AppUser y USUARIO
                    user = new ApplicationUser()
                    {
                        UserName = this.txtCorreoUsuarioDep.Text.Trim().ToLower(), Email = this.txtCorreoUsuarioDep.Text.Trim(), EmailConfirmed = true
                    };
                    IdentityResult result = null;
                    try
                    {
                        result = manager.Create(user);

                        if (result.Succeeded)
                        {
                            result = manager.AddToRole(user.Id, "Editor");

                            using (Entities c = new Entities())
                            {
                                USUARIOS u = new USUARIOS
                                {
                                    NOMBRE         = this.txtNombreUsuarioDep.Text.Trim(),
                                    APELLIDOS      = this.txtApellidosUsuarioDep.Text.Trim(),
                                    DEPARTAMENTOID = Convert.ToInt32(Request["id"]),
                                    FECHA_ALTA     = DateTime.Now,
                                    AspNetUsers    = c.AspNetUsers.Find(user.Id)
                                };
                                c.USUARIOS.Add(u);
                                c.SaveChanges();
                                SuccessMessage         = "Nuevo usuario creado correctamente";
                                successMessage.Visible = true;
                                errorMessage.Visible   = false;
                                LimpiaUsuarioDep();
                                logger.Info("Añadido usuario: " + user.Id + " dpto: " + Convert.ToInt32(Request["id"]));
                            }
                        }
                        else
                        {
                            ErrorMessage         = "Error al crear un nuevo usuario: " + result.Errors.FirstOrDefault();
                            errorMessage.Visible = true;
                        }
                    }
                    catch (Exception ex)
                    {
                        ErrorMessage         = "Error al crear un nuevo usuario: " + ex.Message + " " + ex.InnerException;
                        errorMessage.Visible = true;
                        logger.Error("Error al crear un nuevo usuario. Error: " + ex.Message + " " + ex.InnerException);
                        Notificaciones.NotifySystemOps(ex);
                    }
                }
            }
            else
            {
                ErrorMessage         = "Sólo se permiten cuentas de correo electrónico corporativas (*@aragon.es)";
                errorMessage.Visible = true;
            }
        }
        else
        {
            ErrorMessage         = "Se deben rellenar los campos del formulario.";
            errorMessage.Visible = true;
        }
    }
示例#15
0
    protected void Page_Load(object sender, EventArgs e)
    {
        HttpContext ctx = HttpContext.Current;

        ctx.Response.ContentType = "application/json";

        if (!String.IsNullOrEmpty(Request["op"]))
        {
            string sOperacion    = Request["op"].ToString();
            string sEcho         = "";
            int?   displayLength = null;
            int?   displayStart  = null;
            int?   sortCol       = null;
            string sortOrder     = null;

            if (!String.IsNullOrEmpty(Request["sEcho"]))
            {
                sEcho = HttpContext.Current.Request.Params["sEcho"];
            }
            if (!String.IsNullOrEmpty(Request["iDisplayLength"]))
            {
                displayLength = int.Parse(HttpContext.Current.Request.Params["iDisplayLength"]);
            }
            if (!String.IsNullOrEmpty(Request["iDisplayStart"]))
            {
                displayStart = int.Parse(HttpContext.Current.Request.Params["iDisplayStart"]);
            }
            if (!String.IsNullOrEmpty(Request["sSortDir_0"]))
            {
                sortOrder = HttpContext.Current.Request.Params["sSortDir_0"];
            }
            if (!String.IsNullOrEmpty(Request["iSortCol_0"]))
            {
                sortCol = int.Parse(HttpContext.Current.Request.Params["iSortCol_0"]);
            }


            if (sOperacion == "O")
            {
                //Carga de Objetivo y sus Acciones
                if (Request["id"] != null)
                {
                    using (Entities c = new Entities())
                    {
                        int iDeptId;
                        try
                        {
                            iDeptId = Convert.ToInt32(Request["id"]);

                            DEPARTAMENTO d = c.DEPARTAMENTO.Find(Convert.ToInt32(Request["id"]));
                            LEGISLATURA  l = c.LEGISLATURA.Find(d.LEGISLATURA_ID);
                            if (d.VISIBLE && l.ACTUAL)
                            {
                                c.Configuration.ProxyCreationEnabled = false;
                                var results = c.CONTENIDO.Include("ACCION").OfType <OBJETIVO>().Where(st => st.DEPARTAMENTO_ID == iDeptId && st.VISIBLE == true && st.OBJETIVO_ESTRATEGICO != null).ToList();

                                //Para poder listar por Json sin necesidad de personalizarlo

                                /*Response.Write(JsonConvert.SerializeObject(results, Formatting.Indented,
                                 *      new JsonSerializerSettings
                                 *      {
                                 *          ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                                 *      }, ObjSerializer));*/

                                Response.Write(JsonConvert.SerializeObject(results, Formatting.Indented, new JsonConverter[] { new ObjSerializer() }));


                                /* //Así con json personalizado
                                 *  List<OBJETIVO> list = new List<OBJETIVO>();
                                 *      list = c.CONTENIDO.OfType<OBJETIVO>().Where(st => st.DEPARTAMENTO_ID == iDptoId.Value).ToList();
                                 *
                                 *      //Response.Write("{ \"data\":");
                                 *      Response.Write(Json.GetJson(list) );
                                 *      //Response.Write("}");*/
                            }
                        }
                        catch (Exception ex)
                        {
                            logger.Error("View/json_data.aspx.cs (op=O). Error: " + ex.Message + " " + ex.InnerException);
                            Notificaciones.NotifySystemOps(ex, "View/json_data.aspx.cs (op=O). Error: " + ex.Message + " " + ex.InnerException);
                        }
                    }
                }
            }
            else if (sOperacion == "dG")
            {
                //Datos Generales: num objetivos, num acciones, fecha de última actualización
                using (Entities c = new Entities())
                {
                    using (var conn = c.Database.Connection)
                    {
                        try
                        {
                            int             iAcciones  = 0;
                            int             iObjetivos = 0;
                            List <DateTime> dtFechas   = new List <DateTime>();

                            /*  Response.Write("[{\"objetivos\": XXX, \"acciones\":XXX, \"ultima_mod\":\"XXX\"}]");*/

                            var cmd = conn.CreateCommand();
                            conn.Open();
                            cmd.CommandText = @"select COUNT(A.CONTENIDO_ID) as acciones, max(fecha_modificacion) as ultimo_modificado, max (fecha_creacion) as ultimo_creado
                                from PLGO_OWN.accion a
                                inner join PLGO_OWN.CONTENIDO c on c.contenido_id = A.CONTENIDO_ID
                                inner join PLGO_OWN.DEPARTAMENTO d on C.DEPARTAMENTO_ID = D.DEPARTAMENTO_ID
                                inner join PLGO_OWN.LEGISLATURA l on L.LEGISLATURA_ID = D.LEGISLATURA_ID
                                WHERE l.actual = 1 and d.visible = 1 and c.visible = 1 and C.TIPO_CAMBIO_CONTENIDO_ID <> 1
                                ";
                            using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
                            {
                                while (reader.Read())
                                {
                                    iAcciones = reader.GetInt32(0);
                                    dtFechas.Add(reader.GetDateTime(1));
                                    dtFechas.Add(reader.GetDateTime(2));
                                }
                            }

                            cmd.CommandText = @"select COUNT(A.CONTENIDO_ID) as objetivos, max(fecha_modificacion) as ultimo_modificado, max (fecha_creacion) as ultimo_creado
                            from PLGO_OWN.OBJETIVO a
                            inner join PLGO_OWN.CONTENIDO c on c.contenido_id = A.CONTENIDO_ID
                            inner join PLGO_OWN.DEPARTAMENTO d on C.DEPARTAMENTO_ID = D.DEPARTAMENTO_ID
                            inner join PLGO_OWN.LEGISLATURA l on L.LEGISLATURA_ID = D.LEGISLATURA_ID
                            WHERE l.actual = 1 and d.visible = 1 and c.visible = 1 and C.TIPO_CAMBIO_CONTENIDO_ID <> 1
                                ";


                            using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
                            {
                                while (reader.Read())
                                {
                                    iObjetivos = reader.GetInt32(0);
                                    dtFechas.Add(reader.GetDateTime(1));
                                    dtFechas.Add(reader.GetDateTime(2));
                                }
                            }
                            Response.Write("[{\"objetivos\":" + iObjetivos + ",\"acciones\":" + iAcciones + ",\"ultima_mod\":\"" + dtFechas.OrderByDescending(x => x).First() + "\"}]");
                        }
                        catch (Exception ex)
                        {
                            logger.Error("View/json_data.aspx.cs (op=dG). Error: " + ex.Message + " " + ex.InnerException);
                            Notificaciones.NotifySystemOps(ex, "View/json_data.aspx.cs (op=dG). Error: " + ex.Message + " " + ex.InnerException);
                        }
                    }
                }
            }
            //Detalle Departamento
            else if (sOperacion == "dD")
            {
                if (Request["id"] != null)
                {
                    try
                    {
                        using (Entities c = new Entities())
                        {
                            if (Request["id"] == null)
                            {
                                Response.Redirect("VerDepartamentos.aspx", false);
                            }
                            else
                            {
                                DEPARTAMENTO d = c.DEPARTAMENTO.Find(Convert.ToInt32(Request["id"]));
                                if (d.VISIBLE)
                                {
                                    Response.Write("{\"desc\":\"" + d.DESCRIPCION + "\"}");
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        logger.Error("View/json_data.aspx.cs (op=dD) ID= " + Request["id"] + ". Error: " + ex.Message + " " + ex.InnerException);
                        Notificaciones.NotifySystemOps(ex, "View/json_data.aspx.cs (op=dD) ID= " + Request["id"] + ". Error: " + ex.Message + " " + ex.InnerException);
                    }
                }
            }
            //Cuadro de mando
            else if (sOperacion == "cm")
            {
                /*  Response.Write("{\"pLegT\": XXX, \"pObjM\":XXX, \"pObjNI\":\"XXX\", \"pObjI\":\"XXX\", \"pObjT\":\"XXX\"}");*/
                decimal dLegTranscurrida;
                int     iObjetivosSinIniciar          = 0;
                int     iObjetivosIniciados           = 0;
                int     iObjetivosTerminados          = 0;
                int     iNumAcciones                  = 0;
                int     iNumObjetivos                 = 0;
                int     iSumaPorcenajesAvanceAcciones = 0;
                decimal dPorcSinIniciar               = 0;
                decimal dPorcIniciados                = 0;
                decimal dPorcTerminados               = 0;
                decimal dPorcIndiceGlobalCumplimiento = 0;


                LEGISLATURA.GetDatosCuadroMando(out dLegTranscurrida, out iObjetivosSinIniciar, out iObjetivosIniciados, out iObjetivosTerminados,
                                                out iSumaPorcenajesAvanceAcciones, out iNumAcciones, out iNumObjetivos,
                                                out dPorcSinIniciar, out dPorcIniciados, out dPorcTerminados, out dPorcIndiceGlobalCumplimiento);

                dPorcTerminados = 100 - dPorcSinIniciar - dPorcIniciados; //nos aseguramos que la suma no sea mayor que 100%

                Response.Write("{\"pLegT\": " + dLegTranscurrida + ", \"pObjM\": " + dPorcIndiceGlobalCumplimiento + ", \"pObjNI\":" + dPorcSinIniciar + ", \"pObjI\":" + dPorcIniciados + ", \"pObjT\":" + dPorcTerminados + "}");
            }
            //Cuadro de mando por departamento
            else if (sOperacion == "cmd")
            {
                if (Request["id"] != null)
                {
                    try
                    {
                        using (Entities c = new Entities())
                        {
                            if (Request["id"] == null)
                            {
                                Response.Redirect("VerDepartamentos.aspx", false);
                            }
                            else
                            {
                                DEPARTAMENTO d = c.DEPARTAMENTO.Find(Convert.ToInt32(Request["id"]));
                                LEGISLATURA  l = c.LEGISLATURA.Find(d.LEGISLATURA_ID);
                                if (d.VISIBLE && l.ACTUAL)
                                {
                                    //Response.Write("{\"desc\":\"" + d.DESCRIPCION + "\"}");

                                    decimal dLegTranscurrida = LEGISLATURA.GetTiempoLegislatura();
                                    decimal dPorcIndiceGlobalCumplimiento = d.GetEvolucion();
                                    string  sFecha = "";

                                    using (var conn = c.Database.Connection)
                                    {
                                        var cmd = conn.CreateCommand();
                                        conn.Open();
                                        cmd.CommandText = @"select max(fecha_modificacion) as ultimo_modificado
                                        from PLGO_OWN.accion a
                                        inner join PLGO_OWN.CONTENIDO c on c.contenido_id = A.CONTENIDO_ID
                                        inner join PLGO_OWN.DEPARTAMENTO d on C.DEPARTAMENTO_ID = D.DEPARTAMENTO_ID
                                        inner join PLGO_OWN.LEGISLATURA l on L.LEGISLATURA_ID = D.LEGISLATURA_ID
                                        WHERE l.actual = 1 and d.visible = 1 and d.DEPARTAMENTO_ID = :DptoId  and c.visible = 1 and C.TIPO_CAMBIO_CONTENIDO_ID <> 1
                                        ";


                                        var parameter = cmd.CreateParameter();
                                        parameter.ParameterName = ":DptoId";
                                        parameter.Value         = d.DEPARTAMENTO_ID;
                                        cmd.Parameters.Add(parameter);

                                        using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
                                        {
                                            while (reader.Read())
                                            {
                                                try
                                                {
                                                    sFecha = reader.GetDateTime(0).ToShortDateString();
                                                }
                                                catch {
                                                    sFecha = "No disponible";
                                                }
                                            }
                                        }
                                    }
                                    Response.Write("{\"desc\":\"" + d.DESCRIPCION + "\", \"pLegT\": " + dLegTranscurrida + ", \"pObjM\": " + dPorcIndiceGlobalCumplimiento + ", \"um\":\"" + sFecha + "\"}");
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        logger.Error("View/json_data.aspx.cs (op=dD) ID= " + Request["id"] + ". Error: " + ex.Message + " " + ex.InnerException);
                        Notificaciones.NotifySystemOps(ex, "View/json_data.aspx.cs (op=dD) ID= " + Request["id"] + ". Error: " + ex.Message + " " + ex.InnerException);
                    }
                }
            }
        }
    }