protected void btnEliminar_Click(object sender, EventArgs e)
        {
            // ----------------------------------------------
            int intIdRequerimiento = ALCSA.FWK.Web.Control.ExtraerValorComoEntero(hdfIdRequerimiento);

            // ----------------------------------------------
            ALCSA.Negocio.Requerimientos.Estado objEstado = new ALCSA.Negocio.Requerimientos.Estado(ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_ELIMINADA);
            // ----------------------------------------------
            ALCSA.Negocio.Requerimientos.Requerimiento objRequerimiento = new ALCSA.Negocio.Requerimientos.Requerimiento(intIdRequerimiento);
            objRequerimiento.IdEstado = objEstado.ID;
            objRequerimiento.Guardar();
            // ----------------------------------------------
            Response.Redirect(string.Format("~/Requerimientos/Listar.aspx?mensaje={0}", ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_ELIMINADA), true);
            // ----------------------------------------------
        }
        protected void btnCambiarEstado_Click(object sender, EventArgs e)
        {
            // ----------------------------------------------
            ALCSA.Negocio.Requerimientos.Estado objEstado = new ALCSA.Negocio.Requerimientos.Estado(ALCSA.FWK.Web.Control.ExtraerValor(ddlEstados));

            int intIdRequerimiento = ALCSA.FWK.Web.Control.ExtraerValorComoEntero(hdfIdRequerimiento);

            // ----------------------------------------------
            ALCSA.Negocio.Requerimientos.Observacion objObservacion = new ALCSA.Negocio.Requerimientos.Observacion()
            {
                IdDocumento      = 0,
                Descripcion      = ALCSA.FWK.Web.Control.ExtraerValor(txtObservacionEstado),
                IdRequerimientos = intIdRequerimiento,
                Usuario          = ALCSA.FWK.Web.Control.ExtraerValor(hdfUsuario)
            };

            objObservacion.Guardar();
            // ----------------------------------------------
            ALCSA.Negocio.Requerimientos.Requerimiento objRequerimiento = new ALCSA.Negocio.Requerimientos.Requerimiento(intIdRequerimiento);
            objRequerimiento.IdEstado = objEstado.ID;

            if (objEstado.Codigo == ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_RECHAZADO)
            {
                objRequerimiento.UsuarioAprobador = ALCSA.FWK.Web.Control.ExtraerValor(hdfUsuario);
            }
            else if (objEstado.Codigo == ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_EN_DESARROLLO)
            {
                objRequerimiento.UsuarioAprobador   = ALCSA.FWK.Web.Control.ExtraerValor(hdfUsuario);
                objRequerimiento.UsuarioResponsable = ALCSA.FWK.Web.Control.ExtraerValor(ddlDesarrolladores);
            }

            objRequerimiento.Guardar();
            // ----------------------------------------------
            CargarGrillaObservaciones(gvObservaciones.PageIndex);
            // ----------------------------------------------
            ALCSA.FWK.Web.Control.AsignarValor(hdfCodigoEstadoActual, objEstado.Codigo);
            ALCSA.FWK.Web.Control.AsignarValor(lblEstado, objEstado.Nombre);
            CargarListaEstados(objRequerimiento);
            // ----------------------------------------------
            btnGuardar.Visible  = false;
            btnEliminar.Visible = false;
            // ----------------------------------------------
            // AGREGAR MENSAJE
            ALCSA.FWK.Web.Control.AsignarValor(lblMensaje, "El cambio de estado se registró correctamente.");
            // ----------------------------------------------
            EnviarCorreo(objRequerimiento, false);
            // ----------------------------------------------
        }
        private void CargarListaEstados(ALCSA.Negocio.Requerimientos.Requerimiento requerimiento)
        {
            IList <ALCSA.Entidades.Requerimientos.Estado> arrEstados = new ALCSA.Negocio.Requerimientos.Estado().Listar();
            string strEstado          = ALCSA.FWK.Web.Control.ExtraerValor(hdfCodigoEstadoActual);
            string strUsuarioRevision = ConfigurationManager.AppSettings["USUARIO_REVISION"];
            string strUsuario         = ALCSA.FWK.Web.Control.ExtraerValor(hdfUsuario);
            int    intIndice          = 0;

            gvObservaciones.Columns[3].Visible =
                !(requerimiento.CodigoEstado == ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_ELIMINADA ||
                  requerimiento.CodigoEstado == ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_RECHAZADO);

            while (intIndice < arrEstados.Count)
            {
                if (arrEstados[intIndice].Codigo != ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_ELIMINADA &&
                    requerimiento.UsuarioSolicitante == strUsuario &&
                    requerimiento.UsuarioSolicitante != strUsuarioRevision)
                {
                    arrEstados.RemoveAt(intIndice);
                }

                // ELIMIAR MISMO ESTADO
                else if (arrEstados[intIndice].Codigo == requerimiento.CodigoEstado)
                {
                    arrEstados.RemoveAt(intIndice);
                }

                // RECHAZADO
                else if (strEstado == ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_RECHAZADO &&
                         arrEstados[intIndice].Codigo != ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_RECHAZADO)
                {
                    arrEstados.RemoveAt(intIndice);
                }

                // ELIMINADO
                else if (strEstado == ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_ELIMINADA &&
                         arrEstados[intIndice].Codigo != ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_ELIMINADA)
                {
                    arrEstados.RemoveAt(intIndice);
                }

                // TERMINADA
                else if (strEstado == ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_TERMINADO &&
                         arrEstados[intIndice].Codigo != ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_TERMINADO)
                {
                    arrEstados.RemoveAt(intIndice);
                }

                // DE PENDIENTE A RECHAZADA O EN DESARROLLO (SOLO PARA USUARIO REVISION)
                else if (strEstado == ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_PENDIENTE &&
                         arrEstados[intIndice].Codigo != ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_RECHAZADO &&
                         arrEstados[intIndice].Codigo != ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_EN_DESARROLLO)
                {
                    arrEstados.RemoveAt(intIndice);
                }

                // DE EN DESARROLLO A APROBADA (USUARIO SOLICITANTE Y USUARIO REVISIÓN)
                else if (strEstado == ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_EN_DESARROLLO &&
                         arrEstados[intIndice].Codigo != ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_APROBADO)
                {
                    arrEstados.RemoveAt(intIndice);
                }

                // DE APROBADA A TERMINADA (USUARIO RESPONSABLE Y USUARIO REVISIÓN)
                else if (strEstado == ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_APROBADO &&
                         arrEstados[intIndice].Codigo != ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_TERMINADO)
                {
                    arrEstados.RemoveAt(intIndice);
                }

                else
                {
                    intIndice++;
                }
            }

            ddlEstados.DataSource = arrEstados;
            ddlEstados.DataBind();
            ddlEstados.Items.Insert(0, new ListItem("Seleccione un Estado", string.Empty));
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            // ----------------------------------------------
            if (Page.IsPostBack)
            {
                return;
            }
            // ----------------------------------------------
            if (Session["Usuario"] == null)
            {
                base.Response.Write("<script>alert('Por seguridad expiro la p\x00e1gina');window.open('" + ConfigurationSettings.AppSettings["Inicio"].ToString() + "','_top')</script>");
                base.Response.End();
            }
            // ----------------------------------------------
            ALCSA.FWK.Web.Control.AsignarValor(lblFechaIngreso, DateTime.Now, true);
            ALCSA.FWK.Web.Control.AsignarValor(lblNombreUsuario, Session["Usuario"].ToString());
            ALCSA.FWK.Web.Control.AsignarValor(hdfUsuario, lblNombreUsuario.Text);
            // ----------------------------------------------
            ALCSA.Negocio.Requerimientos.Estado objEstado = new ALCSA.Negocio.Requerimientos.Estado(ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_PENDIENTE);
            ALCSA.FWK.Web.Control.AsignarValor(hdfCodigoEstadoActual, objEstado.Codigo);
            ALCSA.FWK.Web.Control.AsignarValor(lblEstado, objEstado.Nombre);
            ALCSA.FWK.Web.Control.AsignarValor(hdfEsPopup, ALCSA.FWK.Web.Sitio.ExtraerValorQueryStringComoEntero(Request, "popup"));
            // ----------------------------------------------
            ALCSA.Negocio.Requerimientos.Requerimiento objRequerimiento = new ALCSA.Negocio.Requerimientos.Requerimiento(
                ALCSA.FWK.Web.Sitio.ExtraerValorQueryStringComoEntero(Request, "id_req")
                );
            // ----------------------------------------------
            ddlDesarrolladores.DataSource = new ALCSA.Negocio.Requerimientos.Usuario().Listar();
            ddlDesarrolladores.DataBind();
            // ----------------------------------------------
            if (objRequerimiento.ID > 0)
            {
                ALCSA.FWK.Web.Control.AsignarValor(hdfIdRequerimiento, objRequerimiento.ID);
                ALCSA.FWK.Web.Control.AsignarValor(lblFechaIngreso, objRequerimiento.FechaIngreso, true);
                ALCSA.FWK.Web.Control.AsignarValor(lblNombreUsuario, objRequerimiento.UsuarioSolicitante);
                ALCSA.FWK.Web.Control.AsignarValor(txtDescripcion, objRequerimiento.Descripcion);
                ALCSA.FWK.Web.Control.AsignarValor(hdfCodigoEstadoActual, objRequerimiento.CodigoEstado);
                ALCSA.FWK.Web.Control.AsignarValor(lblEstado, objRequerimiento.NombreEstado);

                txtDescripcion.Enabled    = false;
                fupArchivoInicial.Visible = false;
                btnGuardar.Visible        = false;

                btnEliminar.Visible =
                    objRequerimiento.CodigoEstado == ALCSA.Negocio.Requerimientos.Requerimiento.ESTADO_PENDIENTE &&
                    objRequerimiento.UsuarioSolicitante == hdfUsuario.Value;

                if (objRequerimiento.IdDocumento > 0)
                {
                    ALCSA.Negocio.Documentos.Fisicos.Documento objDocumento = new ALCSA.Negocio.Documentos.Fisicos.Documento(objRequerimiento.IdDocumento);

                    ALCSA.FWK.Web.Control.AsignarValor(hdfIdDocumentoInicial, objRequerimiento.IdDocumento);
                    lblDescargarArchivoInicial.Text    = objDocumento.Nombre;
                    lblDescargarArchivoInicial.Visible = true;
                }

                if (ALCSA.FWK.Web.Sitio.ExtraerValorQueryStringComoEntero(Request, "mensaje").Equals(1))
                {
                    ALCSA.FWK.Web.Control.AsignarValor(lblMensaje, "El requerimiento se guardó correctamente.");
                }
            }
            // ----------------------------------------------
            CargarListaEstados(objRequerimiento);
            // ----------------------------------------------
            CargarGrillaObservaciones(0);
            // ----------------------------------------------
        }