/// <summary>
    /// HECHO POR CESAR PULIDO
    /// EL DIA 18 DE DICIEMBRE DE 2012
    /// PARA GENERAR LA REFERENCIA
    /// </summary>
    /// <returns></returns>
    public byte[] GenerarPDFReferencia(Decimal ID_REFERENCIA, Decimal ID_SOLICITUD)
    {
        tools _tools = new tools();

        String html_encabezado = "<html>";
        html_encabezado += "<body>";

        String html_pie = "</body>";
        html_pie += "</html>";

        radicacionHojasDeVida _radicacionHojasDeVida = new radicacionHojasDeVida(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());
        DataTable tablaSolicitud = _radicacionHojasDeVida.ObtenerRegSolicitudesingresoPorIdSolicitud(Convert.ToInt32(ID_SOLICITUD));
        DataRow filaSolicitud = tablaSolicitud.Rows[0];

        referencia _referencia = new referencia(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());
        DataTable tablaReferencia = _referencia.ObtenerPorIdReferencia(ID_REFERENCIA);
        DataRow filaReferencia = tablaReferencia.Rows[0];

        String NOMBRE_CANDIDATO = filaSolicitud["NOMBRES"].ToString().Trim() + " " + filaSolicitud["APELLIDOS"].ToString().Trim();
        String NUM_DOC_IDENTIDAD_CANDIDATO = filaSolicitud["NUM_DOC_IDENTIDAD"].ToString().Trim();

        String EMPRESA_DONDE_TRABAJO_CANDIDATO = filaReferencia["EMPRESA_TRABAJO"].ToString().Trim();
        String TELEFONO_EMPRESA = filaReferencia["NUM_TELEFONO"].ToString().Trim();

        String EMPRESA_TEMPORAL = filaReferencia["EMPRESA_TEMPORAL"].ToString().Trim();
        String NUM_TELEFONO_TEMPORAL = filaReferencia["NUM_TELEFONO_TEMPOAL"].ToString().Trim();

        String TIPO_CONTRATO = filaReferencia["TIPO_CONTRATO"].ToString().Trim();

        String FECHA_INGRESO_CANDIDATO = "";
        if (DBNull.Value.Equals(filaReferencia["FECHA_INGRESO"]) == false)
        {
            FECHA_INGRESO_CANDIDATO = Convert.ToDateTime(filaReferencia["FECHA_INGRESO"]).ToShortDateString();
        }
        String FECHA_RETIRO_CANDIDATO = "";
        if (DBNull.Value.Equals(filaReferencia["FECHA_RETIRO"]) == false)
        {
            FECHA_RETIRO_CANDIDATO = Convert.ToDateTime(filaReferencia["FECHA_RETIRO"]).ToShortDateString();
        }

        String ULTIMO_CARGO_CANDIDATO = filaReferencia["ULTIMO_CARGO"].ToString().Trim();

        String NOMBRE_INFORMANTE = filaReferencia["NOMBRE_INFORMANTE"].ToString().Trim();
        String CARGO_INFORMANTE = filaReferencia["CARGO_INFORMANTE"].ToString().Trim();

        String NOMBRE_JEFE = filaReferencia["NOMBRE_JEFE"].ToString().Trim();
        String CARGO_JEFE = filaReferencia["CARGO_JEFE"].ToString().Trim();

        String ULTIMO_SALARIO_CANDIDATO = "Desconocido.";
        try
        {
            ULTIMO_SALARIO_CANDIDATO = Convert.ToDecimal(filaReferencia["ULTIMO_SALARIO"]).ToString();
        }
        catch
        {
            ULTIMO_SALARIO_CANDIDATO = "Desconocido.";
        }

        String COMISIONES = filaReferencia["COMISIONES"].ToString().Trim();
        String BONOS = filaReferencia["BONOS"].ToString().Trim();

        String MOTIVO_RETIRO = filaReferencia["MOTIVO_RETIRO"].ToString().Trim();

        String USUARIO_REFERENCIADOR = Session["USU_LOG"].ToString();
        String NOMBRE_REFERENCIADOR = "Desconocido.";
        if (DBNull.Value.Equals(filaReferencia["USU_MOD"]) == false)
        {
            USUARIO_REFERENCIADOR = filaReferencia["USU_MOD"].ToString().Trim();
        }
        else
        {
            USUARIO_REFERENCIADOR = filaReferencia["USU_CRE"].ToString().Trim();
        }

        String CUALIDADES_CALIFICACION = filaReferencia["CUALIDADES_CALIFICACION"].ToString().Trim();

        usuario _usuario = new usuario(Session["idEmpresa"].ToString());
        DataTable tablaUsuario = _usuario.ObtenerUsuarioPorUsuLog(USUARIO_REFERENCIADOR);
        DataRow filaUsuario = tablaUsuario.Rows[0];
        if (filaUsuario["USU_TIPO"].ToString().ToUpper() == "PLANTA")
        {
            NOMBRE_REFERENCIADOR = filaUsuario["NOMBRES"].ToString().Trim() + " " + filaUsuario["APELLIDOS"].ToString().Trim();
        }
        else
        {
            NOMBRE_REFERENCIADOR = filaUsuario["NOMBRES_EXTERNO"].ToString().Trim() + " " + filaUsuario["APELLIDOS_EXTERNO"].ToString().Trim();
        }

        //En esta variable cargamos el documento plantilla
        StreamReader archivo_original = new StreamReader(Server.MapPath(@"~\plantillas_reportes\referencia.htm"));

        String html_formato_referencia = html_encabezado + archivo_original.ReadToEnd();

        archivo_original.Dispose();
        archivo_original.Close();

        html_formato_referencia = html_formato_referencia.Replace("[NOMBRE_CANDIDATO]", NOMBRE_CANDIDATO);
        html_formato_referencia = html_formato_referencia.Replace("[NUM_DOC_IDENTIDAD_CANDIDATO]", NUM_DOC_IDENTIDAD_CANDIDATO);

        html_formato_referencia = html_formato_referencia.Replace("[EMPRESA_DONDE_TRABAJO_CANDIDATO]", EMPRESA_DONDE_TRABAJO_CANDIDATO);
        html_formato_referencia = html_formato_referencia.Replace("[TELEFONO_EMPRESA]", TELEFONO_EMPRESA);

        html_formato_referencia = html_formato_referencia.Replace("[EMPRESA_TEMPORAL]", EMPRESA_TEMPORAL);
        html_formato_referencia = html_formato_referencia.Replace("[TELEFONO_TEMPORAL]", NUM_TELEFONO_TEMPORAL);

        if (TIPO_CONTRATO == "OBRA O LABOR")
        {
            html_formato_referencia = html_formato_referencia.Replace("[OBRA_LABOR]", " X ");
            html_formato_referencia = html_formato_referencia.Replace("[FIJO]", "___");
            html_formato_referencia = html_formato_referencia.Replace("[INDEFINIDO]", "___");
        }
        else
        {
            if (TIPO_CONTRATO == "FIJO")
            {
                html_formato_referencia = html_formato_referencia.Replace("[OBRA_LABOR]", "___");
                html_formato_referencia = html_formato_referencia.Replace("[FIJO]", " X ");
                html_formato_referencia = html_formato_referencia.Replace("[INDEFINIDO]", "___");
            }
            else
            {
                if (TIPO_CONTRATO == "INDEFINIDO")
                {
                    html_formato_referencia = html_formato_referencia.Replace("[OBRA_LABOR]", "___");
                    html_formato_referencia = html_formato_referencia.Replace("[FIJO]", "___");
                    html_formato_referencia = html_formato_referencia.Replace("[INDEFINIDO]", " X ");
                }
                else
                {
                    html_formato_referencia = html_formato_referencia.Replace("[OBRA_LABOR]", "___");
                    html_formato_referencia = html_formato_referencia.Replace("[FIJO]", "___");
                    html_formato_referencia = html_formato_referencia.Replace("[INDEFINIDO]", "___");
                }
            }
        }

        html_formato_referencia = html_formato_referencia.Replace("[FECHA_INGRESO_CANDIDATO]", FECHA_INGRESO_CANDIDATO);
        html_formato_referencia = html_formato_referencia.Replace("[FECHA_RETIRO_CANDIDATO]", FECHA_RETIRO_CANDIDATO);

        html_formato_referencia = html_formato_referencia.Replace("[ULTIMO_CARGO_CANDIDATO]", ULTIMO_CARGO_CANDIDATO);

        html_formato_referencia = html_formato_referencia.Replace("[NOMBRE_INFORMANTE]", NOMBRE_INFORMANTE);
        html_formato_referencia = html_formato_referencia.Replace("[CARGO_INFORMANTE]", CARGO_INFORMANTE);

        html_formato_referencia = html_formato_referencia.Replace("[NOMBRE_JEFE]", NOMBRE_JEFE);
        html_formato_referencia = html_formato_referencia.Replace("[CARGO_JEFE]", CARGO_JEFE);

        html_formato_referencia = html_formato_referencia.Replace("[ULTIMO_SALARIO_CANDIDATO]", ULTIMO_SALARIO_CANDIDATO);
        html_formato_referencia = html_formato_referencia.Replace("[COMISIONES]", COMISIONES);
        html_formato_referencia = html_formato_referencia.Replace("[BONOS]", BONOS);

        html_formato_referencia = html_formato_referencia.Replace("[MOTIVO_RETIRO]", MOTIVO_RETIRO);

        html_formato_referencia = html_formato_referencia.Replace("[NOMBRE_REFERENCIADOR]", NOMBRE_REFERENCIADOR);

        if (DBNull.Value.Equals(filaReferencia["FCH_MOD"]) == false)
        {
            html_formato_referencia = html_formato_referencia.Replace("[FECHA_REFERECIA]", Convert.ToDateTime(filaReferencia["FCH_MOD"]).ToShortDateString());
        }
        else
        {
            html_formato_referencia = html_formato_referencia.Replace("[FECHA_REFERECIA]", Convert.ToDateTime(filaReferencia["FCH_CRE"]).ToShortDateString());
        }

        //ya esta la informacion de la referecia basica ahora le adicionadmos al informe los datos de las preguntas
        DataTable tablaPreguntasRespuestas = _referencia.ObtenerPreguntasRespuestasReferencia(ID_REFERENCIA);
        if (tablaPreguntasRespuestas.Rows.Count > 0)
        {
            int contadorPreguntas = 0;
            //recorrido por las preguntas
            String html_tabla_preguntas = "";
            html_tabla_preguntas += "<table border=\"1\" cellpadding=\"1\" cellspacing=\"0\" width=\"100%\" align=\"center\">";
            html_tabla_preguntas += "<tr>";
            html_tabla_preguntas += "<td width=\"15%\" style=\"text-align:center; font-weight: bold;\">";
            html_tabla_preguntas += "#";
            html_tabla_preguntas += "</td>";
            html_tabla_preguntas += "<td style=\"text-align:center; font-weight: bold;\">";
            html_tabla_preguntas += "CUESTIONARIO";
            html_tabla_preguntas += "</td>";
            html_tabla_preguntas += "<td style=\"text-align:center; font-weight: bold;\">";
            html_tabla_preguntas += "RESPUESTA";
            html_tabla_preguntas += "</td>";
            html_tabla_preguntas += "</tr>";
            for (int i = 0; i < tablaPreguntasRespuestas.Rows.Count; i++)
            {
                DataRow filaPregunta = tablaPreguntasRespuestas.Rows[i];

                contadorPreguntas += 1;

                String textoPregunta = filaPregunta["CONTENIDO"].ToString().Trim();
                String textoRespuesta = filaPregunta["RESPUESTA"].ToString().Trim();

                html_tabla_preguntas += "<tr>";
                html_tabla_preguntas += "<td width=\"15%\" style=\"text-align:center;\">";
                html_tabla_preguntas += contadorPreguntas.ToString();
                html_tabla_preguntas += "</td>";
                html_tabla_preguntas += "<td style=\"text-align:justify;\">";
                html_tabla_preguntas += textoPregunta;
                html_tabla_preguntas += "</td>";
                html_tabla_preguntas += "<td style=\"text-align:center;\">";
                html_tabla_preguntas += textoRespuesta;
                html_tabla_preguntas += "</td>";
                html_tabla_preguntas += "</tr>";
            }
            html_tabla_preguntas += "</table>";

            html_formato_referencia = html_formato_referencia.Replace("[TABLA_CUESTIONARIO]", html_tabla_preguntas);
        }

        if (String.IsNullOrEmpty(CUALIDADES_CALIFICACION) == false)
        {
            String html_tabla_preguntas = "";
            html_tabla_preguntas += "<table border=\"1\" cellpadding=\"1\" cellspacing=\"0\" width=\"80%\" align=\"center\">";
            html_tabla_preguntas += "<tr>";
            html_tabla_preguntas += "<td width=\"50%\" style=\"text-align:center; font-weight: bold;\">";
            html_tabla_preguntas += "CUALIDAD";
            html_tabla_preguntas += "</td>";
            html_tabla_preguntas += "<td width=\"12%\" style=\"text-align:center; font-weight: bold;\">";
            html_tabla_preguntas += "EXCELENTE";
            html_tabla_preguntas += "</td>";
            html_tabla_preguntas += "<td width=\"13%\" style=\"text-align:center; font-weight: bold;\">";
            html_tabla_preguntas += "BUENO";
            html_tabla_preguntas += "</td>";
            html_tabla_preguntas += "<td width=\"12%\" style=\"text-align:center; font-weight: bold;\">";
            html_tabla_preguntas += "REGULAR";
            html_tabla_preguntas += "</td>";
            html_tabla_preguntas += "<td width=\"13%\" style=\"text-align:center; font-weight: bold;\">";
            html_tabla_preguntas += "MALO";
            html_tabla_preguntas += "</td>";
            html_tabla_preguntas += "</tr>";

            String[] cualidadesCalificacionesArray = CUALIDADES_CALIFICACION.Split(';');

            foreach(String cualidadCalificacion in cualidadesCalificacionesArray)
            {
                String CUALIDAD = cualidadCalificacion.Split(':')[0];
                String CALIFICACION = cualidadCalificacion.Split(':')[1];

                html_tabla_preguntas += "<tr>";
                html_tabla_preguntas += "<td width=\"50%\" style=\"text-align:left;\">";
                html_tabla_preguntas += CUALIDAD;
                html_tabla_preguntas += "</td>";
                html_tabla_preguntas += "<td width=\"12%\" style=\"text-align:justify;\">";
                if(CALIFICACION == "EXCELENTE")
                {
                    html_tabla_preguntas += "X";
                }
                html_tabla_preguntas += "</td>";

                html_tabla_preguntas += "<td width=\"13%\" style=\"text-align:center;\">";
                if (CALIFICACION == "BUENO")
                {
                    html_tabla_preguntas += "X";
                }
                html_tabla_preguntas += "</td>";
                html_tabla_preguntas += "<td width=\"12%\" style=\"text-align:center;\">";
                if (CALIFICACION == "REGULAR")
                {
                    html_tabla_preguntas += "X";
                }
                html_tabla_preguntas += "</td>";
                html_tabla_preguntas += "<td width=\"13%\" style=\"text-align:center;\">";
                if (CALIFICACION == "MALO")
                {
                    html_tabla_preguntas += "X";
                }
                html_tabla_preguntas += "</td>";
                html_tabla_preguntas += "</tr>";
            }

            html_tabla_preguntas += "</table>";

            html_formato_referencia = html_formato_referencia.Replace("[TABLA_CUALIDADES]", html_tabla_preguntas);
        }

        html_formato_referencia += html_pie;

        //creamos un configuramos el documento de pdf
        //(tamaño de la hoja,margen izq, margen der, margin arriba margen abajo)
        iTextSharp.text.Document document = new iTextSharp.text.Document(new Rectangle(595, 842), 50, 50, 80, 45);

        using (MemoryStream streamArchivo = new MemoryStream())
        {
            iTextSharp.text.pdf.PdfWriter writer = PdfWriter.GetInstance(document, streamArchivo);

            // Our custom Header and Footer is done using Event Handler
            pdfEvents PageEventHandler = new pdfEvents();
            writer.PageEvent = PageEventHandler;

            // Define the page header
            // Define the page header
            if (Session["idEmpresa"].ToString() == "1")
            {
                PageEventHandler.dirImagenHeader = Server.MapPath("~/imagenes/reportes/logo_sertempo.png");
            }
            else
            {
                PageEventHandler.dirImagenHeader = Server.MapPath("~/imagenes/reportes/logo_eficiencia.png");
            }

            PageEventHandler.fechaImpresion = DateTime.Now;
            PageEventHandler.tipoDocumento = "referencia";

            document.Open();

            //capturamos el archivo temporal del response
            String tempFile = Path.GetTempFileName();

            //y lo llenamos con el html de la plantilla
            using (StreamWriter tempwriter = new StreamWriter(tempFile, false))
            {
                tempwriter.Write(html_formato_referencia);
            }

            //leeemos el archivo temporal y lo colocamos en el documento de pdf
            List<IElement> htmlarraylist = HTMLWorker.ParseToList(new StreamReader(tempFile), new StyleSheet());

            foreach (IElement element in htmlarraylist)
            {
                if (element.Chunks.Count > 0)
                {
                    if (element.Chunks[0].Content == "linea para paginacion de pdf")
                    {
                        document.NewPage();
                    }
                    else
                    {
                        document.Add(element);
                    }
                }
                else
                {
                    document.Add(element);
                }
            }

            //limpiamos todo
            document.Close();

            writer.Close();

            return streamArchivo.ToArray();
        }
    }
    private void Guardar()
    {
        Decimal ID_SOLICITUD = Convert.ToDecimal(HiddenField_ID_SOLICITUD.Value);
        String ARCHIVO = HiddenField_ARCHIVO.Value;
        Decimal ID_REQUERIMIENTO = 0;
        try
        {
            ID_REQUERIMIENTO = Convert.ToDecimal(HiddenField_ID_REQUERIMIENTO.Value);
        }
        catch
        {
            ID_REQUERIMIENTO = 0;
        }

        String NOMBRE_INFORMANTE = TextBox_NOMBRE_INFORMANTE.Text.Trim();
        String CARGO_INFORMANTE = TextBox_CARGO_INFORMANTE.Text.Trim();

        String NOMBRE_JEFE = TextBox_Nombrejefe.Text.Trim();
        String CARGO_JEFE = TextBox_CargoJefe.Text.Trim();

        String EMPRESA_TRABAJO = TextBox_EMPRESA_TRABAJO.Text.Trim();
        String NUM_TELEFONO = TextBox_Numero_Telefono.Text.Trim();
        String EMPRESA_TEMPORAL = TextBox_EmpresaTemporal.Text.Trim();
        String TELEFONO_TEMPORAL = TextBox_TelefonoEmpresaTemporal.Text.Trim();

        String TIPO_CONTRATO = DropDownList_TipoContrato.SelectedValue;
        DateTime FECHA_INGRESO = new DateTime();
        try
        {
            FECHA_INGRESO = Convert.ToDateTime(TextBox_FECHA_INGRESO.Text);
        }
        catch
        {
            FECHA_INGRESO = new DateTime();
        }

        DateTime FECHA_RETIRO = new DateTime();
        try
        {
            FECHA_RETIRO = Convert.ToDateTime(TextBox_FECHA_RETIRO.Text);
        }
        catch
        {
            FECHA_RETIRO = new DateTime();
        }

        String ULTIMO_CARGO = TextBox_ULTIMO_CARGO.Text.Trim();

        Decimal ULTIMO_SALARIO = Convert.ToDecimal(TextBox_ULTIMO_SALARIO.Text);
        String COMISIONES = TextBox_Comisiones.Text.Trim();
        String BONOS = TextBox_Bonos.Text.Trim();

        String MOTIVO_RETIRO = TextBox_MotivoRetiro.Text.Trim();

        String VOLVER_A_CONTRATAR = null;

        String CUALIDADES_CALIFICACION = null;
        foreach (GridViewRow filaGrilla in GridView_CalificacionesReferencia.Rows)
        {
            Label label_cualidad = filaGrilla.FindControl("Label_Cualidad") as Label;
            DropDownList drop_calificaciones = filaGrilla.FindControl("DropDownList_Calificacion") as DropDownList;

            if (CUALIDADES_CALIFICACION == null)
            {
                CUALIDADES_CALIFICACION = label_cualidad.Text + ":" + drop_calificaciones.SelectedValue;
            }
            else
            {
                CUALIDADES_CALIFICACION += ";" + label_cualidad.Text + ":" + drop_calificaciones.SelectedValue;
            }
        }

        Decimal ID_CATEGORIA = Convert.ToDecimal(DropDownList_TipoConfirmacionReferencia.SelectedValue);

        List<respuestaReferencia> listaRespuestas = new List<respuestaReferencia>();
        respuestaReferencia _respuestaParaLista;
        for (int i = 0; i < GridView_PREGUNTAS.Rows.Count; i++)
        {
            _respuestaParaLista = new respuestaReferencia();

            _respuestaParaLista.ID_PREGUNTA = Convert.ToDecimal(GridView_PREGUNTAS.DataKeys[i].Values["ID_PREGUNTA"]);
            _respuestaParaLista.ID_REFERENCIA = 0;
            _respuestaParaLista.ID_RESPUESTA = 0;

            TextBox respuesta = GridView_PREGUNTAS.Rows[i].FindControl("TextBox_RESPUESTA") as TextBox;
            _respuestaParaLista.RESPUESTA = respuesta.Text;

            listaRespuestas.Add(_respuestaParaLista);
        }

        referencia _referencia = new referencia(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());

        referencia.TiposActualizacionReferencia tipoActualizacion = (referencia.TiposActualizacionReferencia)Enum.Parse(typeof(referencia.TiposActualizacionReferencia), HiddenField_TIPO_ACTUALIZACION_REFERENCIA.Value);

        Decimal ID_REFERENCIA = 0;

        if (tipoActualizacion == referencia.TiposActualizacionReferencia.CreacionLimpia)
        {
            ID_REFERENCIA = _referencia.Adicionar(ID_SOLICITUD, EMPRESA_TRABAJO, FECHA_INGRESO, FECHA_RETIRO, ULTIMO_CARGO, NOMBRE_INFORMANTE, CARGO_INFORMANTE, ULTIMO_SALARIO, NUM_TELEFONO, VOLVER_A_CONTRATAR, null, null, ID_CATEGORIA, listaRespuestas, CUALIDADES_CALIFICACION, NOMBRE_JEFE, CARGO_JEFE, EMPRESA_TEMPORAL, TELEFONO_TEMPORAL, TIPO_CONTRATO, COMISIONES, BONOS, MOTIVO_RETIRO);
        }
        else
        {
            ID_REFERENCIA = _referencia.AdicionarConHistorial(ID_SOLICITUD, EMPRESA_TRABAJO, FECHA_INGRESO, FECHA_RETIRO, ULTIMO_CARGO, NOMBRE_INFORMANTE, CARGO_INFORMANTE, ULTIMO_SALARIO, NUM_TELEFONO, VOLVER_A_CONTRATAR, null, null, listaRespuestas, ID_CATEGORIA, CUALIDADES_CALIFICACION, NOMBRE_JEFE, CARGO_JEFE, EMPRESA_TEMPORAL, TELEFONO_TEMPORAL, TIPO_CONTRATO, COMISIONES, BONOS, MOTIVO_RETIRO);
        }

        if (ID_REFERENCIA <= 0)
        {
            Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, _referencia.MensajeError, Proceso.Error);
        }
        else
        {
            Cargar(ID_SOLICITUD, ID_REFERENCIA, ARCHIVO, ID_REQUERIMIENTO);

            Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, "La confirmación de referencia laboral para el candidato: " + Label_NOMBRES.Text + ", fue creada correctamente", Proceso.Correcto);
        }
    }
    private void cargar_DropDownList_TipoConfirmacionReferencia()
    {
        referencia _ref = new referencia(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());

        DataTable tablaCategoriasReferencias = _ref.ObtenerCategoriasActivas();

        DropDownList_TipoConfirmacionReferencia.Items.Clear();

        DropDownList_TipoConfirmacionReferencia.Items.Add(new ListItem("Seleccione...",""));

        if (tablaCategoriasReferencias.Rows.Count <= 0)
        {
            if (_ref.MensajeError != null)
            {
                Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, _ref.MensajeError, Proceso.Error);
            }
            else
            {
                Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, "No se encontró información sobre Confirmación de Referencias, El Usuario encargado debe realizar la Adminitración de Confirmación de Referencias (Categorías y preguntas).", Proceso.Advertencia);
            }
        }
        else
        {
            foreach (DataRow filaTabla in tablaCategoriasReferencias.Rows)
            {
                DropDownList_TipoConfirmacionReferencia.Items.Add(new ListItem(filaTabla["NOMBRE_CAT"].ToString().Trim(), filaTabla["ID_CATEGORIA"].ToString()));
            }
        }

        DropDownList_TipoConfirmacionReferencia.DataBind();
    }
    private void CargarGrillaPreguntasNuevas()
    {
        Decimal ID_CATEGORIA = Convert.ToDecimal(DropDownList_TipoConfirmacionReferencia.SelectedValue);

        referencia _referencia = new referencia(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());

        DataTable tablaPreguntas = _referencia.ObtenerPreguntasActivas(ID_CATEGORIA);

        if (tablaPreguntas.Rows.Count <= 0)
        {
            if (_referencia.MensajeError != null)
            {
                Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, _referencia.MensajeError, Proceso.Error);
            }
            else
            {
                Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, "No se han configurado Preguntas para la confirmación de referencia Laboral para cargos de tipo (" + DropDownList_TipoConfirmacionReferencia.SelectedItem.Text + ").", Proceso.Advertencia);
            }

            GridView_PREGUNTAS.DataSource = null;
            GridView_PREGUNTAS.DataBind();
        }
        else
        {
            CargarGrillaPreguntasNuevasDesdeTabla(tablaPreguntas);
        }
    }
    private void CargarPreguntasAsociadasAReferencia(Decimal ID_REFERENCIA)
    {
        referencia _referencia = new referencia(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());

        DataTable tablaPreguntas = _referencia.ObtenerPreguntasRespuestasReferencia(ID_REFERENCIA);

        if (tablaPreguntas.Rows.Count <= 0)
        {
            if (_referencia.MensajeError != null)
            {
                Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, _referencia.MensajeError, Proceso.Error);
            }
            else
            {
                Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, "No se encontraron preguntas y respuestas asociadas a la confirmación de referencia Laboral seleccionada.", Proceso.Advertencia);
            }
        }
        else
        {
            CargarGrillaPreguntasConRespuesta(tablaPreguntas);
        }
    }
    private void Cargar(Decimal ID_SOLICITUD, Decimal ID_REFERENCIA, String ARCHIVO, Decimal ID_REQUERIMIENTO)
    {
        HiddenField_ID_SOLICITUD.Value = ID_SOLICITUD.ToString();
        HiddenField_ID_REFERENCIA.Value = ID_REFERENCIA.ToString();
        HiddenField_ID_REQUERIMIENTO.Value = ID_REQUERIMIENTO.ToString();
        HiddenField_ARCHIVO.Value = ARCHIVO;

        Ocultar(Acciones.Inicio);

            if (ID_REFERENCIA != 0)
            {
                Mostrar(Acciones.CargarReferencia);
                Desactivar(Acciones.Inicio);
                Cargar(Acciones.CargarReferencia);

                referencia _referencia = new referencia(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());
                DataTable tablaReferencia = _referencia.ObtenerPorIdReferencia(ID_REFERENCIA);
                DataRow filaReferencia = tablaReferencia.Rows[0];

                CargardatosControlregistro(filaReferencia);

                CargarDatosReferencia(filaReferencia);

                CargarCalificacionesReferencia(filaReferencia);

                CargarPreguntasAsociadasAReferencia(ID_REFERENCIA);

                deshabilitarFilasGrilla(GridView_PREGUNTAS);
                deshabilitarFilasGrilla(GridView_CalificacionesReferencia);

                HiddenField_TIPO_ACTUALIZACION_REFERENCIA.Value = referencia.TiposActualizacionReferencia.Nunguna.ToString();
            }
            else
            {
                Mostrar(Acciones.SeleccionTipoReferencia);
                Activar(Acciones.SeleccionTipoReferencia);
                Limpiar(Acciones.NuevaReferencia);
                Cargar(Acciones.SeleccionTipoReferencia);

                HiddenField_TIPO_ACTUALIZACION_REFERENCIA.Value = referencia.TiposActualizacionReferencia.CreacionLimpia.ToString();
            }
    }
    private void CargarGrillaCualidades()
    {
        parametro _par = new parametro(Session["idEmpresa"].ToString());
        DataTable tablaPar = _par.ObtenerParametrosPorTabla(tabla.PARAMETROS_CALIFICACIONES_REFERENCIA);

        if (tablaPar.Rows.Count <= 0)
        {
            if (_par.MensajeError != null)
            {
                Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, _par.MensajeError, Proceso.Error);
            }
            else
            {
                Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, "No se han parametrizado CUALIDADES para evaluar.", Proceso.Advertencia);
            }

            GridView_CalificacionesReferencia.DataSource = null;
            GridView_CalificacionesReferencia.DataBind();
        }
        else
        {

            CargarGrillaC_desdetabla(tablaPar);
        }

        Decimal ID_CATEGORIA = Convert.ToDecimal(DropDownList_TipoConfirmacionReferencia.SelectedValue);

        referencia _referencia = new referencia(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());

        DataTable tablaPreguntas = _referencia.ObtenerPreguntasActivas(ID_CATEGORIA);

        if (tablaPreguntas.Rows.Count <= 0)
        {
            if (_referencia.MensajeError != null)
            {
                Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, _referencia.MensajeError, Proceso.Error);
            }
            else
            {
                Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, "No se han configurado Preguntas para la confirmación de referencia Laboral para cargos de tipo (" + DropDownList_TipoConfirmacionReferencia.SelectedItem.Text + ").", Proceso.Advertencia);
            }

            GridView_PREGUNTAS.DataSource = null;
            GridView_PREGUNTAS.DataBind();
        }
        else
        {
            CargarGrillaPreguntasNuevasDesdeTabla(tablaPreguntas);
        }
    }
    private void Buscar()
    {
        Ocultar(Acciones.Inicio);

        referencia _referencia = new referencia(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());

        DataTable _dataTable = new DataTable();
        switch (this.DropDownList_BUSCAR.SelectedValue)
        {
            case "NUMERO_DOCUMENTO":
                _dataTable = _referencia.ObtenerPorNumeroDocumento(this.TextBox_BUSCAR.Text);
                break;
            case "NOMBRE":
                _dataTable = _referencia.ObtenerPorNombre(this.TextBox_BUSCAR.Text);
                break;
        }

        if (_dataTable.Rows.Count > 0)
        {
            GridView_RESULTADOS_BUSQUEDA.DataSource = _dataTable;
            GridView_RESULTADOS_BUSQUEDA.DataBind();

            Mostrar(Acciones.CargarSolicitud);
        }
        else
        {
            if (!String.IsNullOrEmpty(_referencia.MensajeError))
            {
                Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, "Consulte con el Administrador: " + _referencia.MensajeError, Proceso.Error);
            }
            else
            {
                Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, "No se encontró información para " + this.DropDownList_BUSCAR.SelectedItem + " : " + this.TextBox_BUSCAR.Text, Proceso.Advertencia);
            }

            Mostrar(Acciones.Inicio);
        }

        _dataTable.Dispose();
    }
    private void CargarPreguntas(Decimal ID_CATEGORIA)
    {
        HiddenField_ID_CATEGORIA.Value = ID_CATEGORIA.ToString();
        HiddenField_PROCESO.Value = ProcesoForm.Inicio.ToString();

        HiddenField_ACCION_GRILLA.Value = AccionesGrilla.Ninguna.ToString();
        HiddenField_ACCION_GRILLA_CAT.Value = AccionesGrilla.Ninguna.ToString();

        Ocultar(Acciones.CargarPreg);
        Mostrar(Acciones.CargarPreg);

        referencia _ref = new referencia(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());

        DataTable tablaPreguntas = _ref.ObtenerPreguntasActivas(ID_CATEGORIA);

        if (tablaPreguntas.Rows.Count <= 0)
        {
            if (_ref.MensajeError != null)
            {
                Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, _ref.MensajeError, Proceso.Error);
            }
            else
            {
                Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, "No se encontraron preguntas configuradas para la Categoría seleccionada.", Proceso.Advertencia);
            }

            GridView_PREGUNTAS.DataSource = null;
            GridView_PREGUNTAS.DataBind();

            Panel_PREGUNTAS.Visible = false;
        }
        else
        {
            CargarGrillaPreguntasDesdeTabla(tablaPreguntas);

            inhabilitarFilasGrilla(GridView_PREGUNTAS, 2);
        }
    }
    private void cargarGrillaCategorias()
    {
        referencia _referencia = new referencia(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());

        DataTable tablaCategorias = _referencia.ObtenerCategoriasActivas();

        if (tablaCategorias.Rows.Count <= 0)
        {
            if (_referencia.MensajeError != null)
            {
                Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, _referencia.MensajeError, Proceso.Error);
            }
            else
            {
                Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, "No se encontraron Categorías Activas. Por favor Cree la Categorías correspondientes.", Proceso.Advertencia);
            }

            GridView_CATEGORIAS.DataSource = null;
            GridView_CATEGORIAS.DataBind();

            foreach (GridView filaGrilla in GridView_CATEGORIAS.Rows)
            {
                filaGrilla.BackColor = System.Drawing.Color.Transparent;
            }

            Panel_Categorias.Visible = false;
        }
        else
        {
            CargarGrillaCategoriasDesdeTabla(tablaCategorias);

            inhabilitarFilasGrilla(GridView_CATEGORIAS, 3);
        }
    }
    private void ActualizarPreguntas()
    {
        Decimal ID_CATEGORIA = Convert.ToDecimal(HiddenField_ID_CATEGORIA_SEL.Value);

        List<preguntaReferencia> listaPreguntas = new List<preguntaReferencia>();
        preguntaReferencia preguntaReferenciaParaLista;

        for (int i = 0; i < GridView_PREGUNTAS.Rows.Count; i++)
        {
            GridViewRow filaGrilla = GridView_PREGUNTAS.Rows[i];
            preguntaReferenciaParaLista = new preguntaReferencia();

            TextBox dato = filaGrilla.FindControl("TextBox_PREGUNTA") as TextBox;
            preguntaReferenciaParaLista.CONTENIDO = dato.Text;

            preguntaReferenciaParaLista.ID_PREGUNTA = Convert.ToDecimal(GridView_PREGUNTAS.DataKeys[i].Values["ID_PREGUNTA"]);

            preguntaReferenciaParaLista.ID_CATEGORIA = Convert.ToDecimal(GridView_PREGUNTAS.DataKeys[i].Values["ID_CATEGORIA"]);

            listaPreguntas.Add(preguntaReferenciaParaLista);
        }

        referencia _referencia = new referencia(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());

        Boolean verificador = _referencia.ActualizarPreguntas(listaPreguntas, ID_CATEGORIA);

        if (verificador == false)
        {
            Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, _referencia.MensajeError, Proceso.Error);
        }
        else
        {
            HiddenField_PROCESO.Value = ProcesoForm.Inicio.ToString();

            for(int i = 0; i < GridView_CATEGORIAS.Rows.Count; i++)
            {
                if(Convert.ToDecimal(GridView_CATEGORIAS.DataKeys[i].Values["ID_CATEGORIA"]) == ID_CATEGORIA)
                {
                    GridView_CATEGORIAS.Rows[i].BackColor = colorSeleccionado;
                }
                else
                {
                    GridView_CATEGORIAS.Rows[i].BackColor = System.Drawing.Color.Transparent;
                }
            }

            CargarPreguntas(ID_CATEGORIA);

            Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, "Las Preguntas asociadas a la categoría seleccionada, fueron actualizadas correctamente.", Proceso.Correcto);
        }
    }
    private void ActualizarCategorias()
    {
        List<CategoriaReferencia> listaCategorias = new List<CategoriaReferencia>();

        for (int i = 0; i < GridView_CATEGORIAS.Rows.Count; i++)
        {
            GridViewRow filaGrilla = GridView_CATEGORIAS.Rows[i];
            CategoriaReferencia categoriaParaLista = new CategoriaReferencia();

            Decimal ID_CATEGORIA = Convert.ToDecimal(GridView_CATEGORIAS.DataKeys[i].Values["ID_CATEGORIA"]);
            categoriaParaLista.ID_CATEGORIA = ID_CATEGORIA;

            TextBox datoNombre = filaGrilla.FindControl("TextBox_NOMBRE_cAT") as TextBox;
            categoriaParaLista.NOMBRE_CAT = datoNombre.Text.Trim();

            listaCategorias.Add(categoriaParaLista);
        }

        referencia _ref = new referencia(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());

        Boolean verificador = _ref.ActualizarCategorias(listaCategorias);

        if (verificador == false)
        {
            Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, _ref.MensajeError, Proceso.Error);
        }
        else
        {
            Ocultar(Acciones.Inicio);
            Desactivar(Acciones.Inicio);
            Mostrar(Acciones.Inicio);
            Cargar(Acciones.Inicio);

            Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, "Las Categorías fueron actualizadas correctamente.", Proceso.Correcto);
        }
    }