using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Modelos_Excel;
using Exferia_Aplicacion.Visualizacion;
using Exferia_Controles;
using Exferia_EntityFramework;
using Exferia_Expedientes._0_Modelos;
using Exferia_Expedientes._1_Datos;
using Exferia_Expedientes._3_Vistas.Listados;
using Exferia_Formularios;
using Exferia_General;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using static Exferia_Aplicacion.General.Enumerados;

namespace Exferia_Expedientes._3_Vistas.Controladoras
{
    public class PI_Citaciones_Controladora
    {
        #region Variables Generales
        private PI_Citaciones g_frm_PI_Citaciones = null;//Variable que enlaza con la pantalla asociada
        private PE_Esperando g_frm_PE_Esperando; //Pantalla de Espera, para cuando se ejecutan tareas pesadas como cargar, guardar, etc

        public bool g_bol_Termino_CargaDatos_Inicial = false;//Se utiliza para saber cuando se termina la carga de los datos estaticos

        //Clases de Negocio
        private EPD_Asesores_Datos g_obj_EPD_Asesores_Datos = new EPD_Asesores_Datos();
        private EPD_Juzgados_Datos g_obj_EPD_Juzgados_Datos = new EPD_Juzgados_Datos();
        private EPD_Citaciones_Datos g_obj_EPD_Citaciones_Datos = new EPD_Citaciones_Datos();

        //Listados
        private List<EPD_Asesores> g_lst_EPD_Asesores = null;
        public List<long> g_lst_Asesores_Seleccionados = new List<long>();
        private List<EPD_Juzgados> g_lst_EPD_Juzgados = null;
        public List<long> g_lst_Juzgados_Seleccionados = new List<long>();
        public List<INTERNO_Informe_Citaciones_Modelo> g_lst_INTERNO_Informe_Citaciones_Modelo = null;

        //Tarea Asincrona de carga de datos listados filtros
        private BackgroundWorker g_obj_TareaAsincrona_CargarDatos_Listados_Filtros;
        public bool bol_Termino_CargarDatos_Listados_Filtros = false;

        //Tarea Asincrona Rellenar Datagrid Asesores
        private BackgroundWorker g_TareaAsincrona_Rellenar_DataGrid_Asesores;

        //Tarea Asincrona Rellenar Datagrid Juzgados
        private BackgroundWorker g_TareaAsincrona_Rellenar_DataGrid_Juzgados;

        //Tarea Asincrona de recargar de datos de Generar Informes
        private BackgroundWorker g_obj_TareaAsincrona_GenerarInformes;
        private bool g_bol_Cancelar_TareaAsincrona_GenerarInformes = false;


        //DataGridView
        public List<INTERNO_ABS_Listado_ColumnasDatos_Modelo> g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Columnas;

        //Filtros del listado
        public List<string> g_lst_ColumnasAMostrar_Informe = new List<string>();
        public List<string> g_lst_ColumnasAMostrar_Informe_PrimeraCarga = new List<string>();
        public ABS_Listado_Citaciones_Informe g_obj_ABS_Listado_Citaciones_Informe = new ABS_Listado_Citaciones_Informe();
        public List<string> g_lst_DataGridViews_Generados = new List<string>();
        public Dictionary<string, object> g_dct_ListadoFiltros_Informe = new Dictionary<string, object>();

        //Vairable para obtener el datagridview que se genera cuando se da sobre generar informe
        public DataGridView g_obj_DataGridView_Selecionado = null;

        private DateTime? g_dtt_Valor_Anterior = null;

        #endregion

        #region Constructor
        public PI_Citaciones_Controladora(PI_Citaciones _frm_PI_Citaciones)
        {
            g_frm_PI_Citaciones = _frm_PI_Citaciones;

            Cargar_DatosIniciales();
        }
        #endregion

        #region Datos Inciales
        private void Cargar_DatosIniciales()
        {
            try
            {

                DateTime dtt_FechaCalculo_Semana = g_frm_PI_Citaciones.P_Base_FechaTrabajo;
                //Dia de la semana
                DayOfWeek dow_DiaSemana = dtt_FechaCalculo_Semana.DayOfWeek;

                //Lunes
                if (dow_DiaSemana== DayOfWeek.Monday)
                {
                    //Fecha Inicio ...........................................
                    g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaInicio.Exferia_FechaSeleccion_Fecha = dtt_FechaCalculo_Semana.ToString("dd/MM/yyyy");

                    //Fecha Fin ...........................................
                    g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaFin.Exferia_FechaSeleccion_Fecha = dtt_FechaCalculo_Semana.AddDays(6).ToString("dd/MM/yyyy"); 
                }
                //Martes
                else if (dow_DiaSemana == DayOfWeek.Tuesday)
                {
                    //Fecha Inicio ...........................................
                    g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaInicio.Exferia_FechaSeleccion_Fecha = dtt_FechaCalculo_Semana.AddDays(-1).ToString("dd/MM/yyyy");

                    //Fecha Fin ...........................................
                    g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaFin.Exferia_FechaSeleccion_Fecha = dtt_FechaCalculo_Semana.AddDays(5).ToString("dd/MM/yyyy");
                }
                //Miercoles
                else if (dow_DiaSemana == DayOfWeek.Wednesday)
                {
                    //Fecha Inicio ...........................................
                    g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaInicio.Exferia_FechaSeleccion_Fecha = dtt_FechaCalculo_Semana.AddDays(-2).ToString("dd/MM/yyyy");

                    //Fecha Fin ...........................................
                    g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaFin.Exferia_FechaSeleccion_Fecha = dtt_FechaCalculo_Semana.AddDays(4).ToString("dd/MM/yyyy");
                }
                //Jueves
                else if (dow_DiaSemana == DayOfWeek.Thursday)
                {
                    //Fecha Inicio ...........................................
                    g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaInicio.Exferia_FechaSeleccion_Fecha = dtt_FechaCalculo_Semana.AddDays(-3).ToString("dd/MM/yyyy");

                    //Fecha Fin ...........................................
                    g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaFin.Exferia_FechaSeleccion_Fecha = dtt_FechaCalculo_Semana.AddDays(3).ToString("dd/MM/yyyy");
                }
                //Viernes
                else if (dow_DiaSemana == DayOfWeek.Friday)
                {
                    //Fecha Inicio ...........................................
                    g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaInicio.Exferia_FechaSeleccion_Fecha = dtt_FechaCalculo_Semana.AddDays(-4).ToString("dd/MM/yyyy");

                    //Fecha Fin ...........................................
                    g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaFin.Exferia_FechaSeleccion_Fecha = dtt_FechaCalculo_Semana.AddDays(2).ToString("dd/MM/yyyy");
                }
                //Sabado
                else if (dow_DiaSemana == DayOfWeek.Saturday)
                {
                    //Fecha Inicio ...........................................
                    g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaInicio.Exferia_FechaSeleccion_Fecha = dtt_FechaCalculo_Semana.AddDays(-5).ToString("dd/MM/yyyy");

                    //Fecha Fin ...........................................
                    g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaFin.Exferia_FechaSeleccion_Fecha = dtt_FechaCalculo_Semana.AddDays(1).ToString("dd/MM/yyyy");
                }
                //Domingo
                else if (dow_DiaSemana == DayOfWeek.Sunday)
                {
                    //Fecha Inicio ...........................................
                    g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaInicio.Exferia_FechaSeleccion_Fecha = dtt_FechaCalculo_Semana.AddDays(-6).ToString("dd/MM/yyyy");

                    //Fecha Fin ...........................................
                    g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaFin.Exferia_FechaSeleccion_Fecha = dtt_FechaCalculo_Semana.ToString("dd/MM/yyyy");
                }
                
                //Hora Inicio ...........................................
                g_frm_PI_Citaciones.Exferia_TextBox_ConMascara_HoraInicio.Text = "00:00";

                //Hora Fin ...........................................
                g_frm_PI_Citaciones.Exferia_TextBox_ConMascara_HoraFin.Text = "23:59";
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(PI_Citaciones_Controladora) + "/" + nameof(Cargar_DatosIniciales));
            }
        }
        #endregion

        #region CargarDatos_Listados_Filtros
        public void CargarDatos_Listados_Filtros()
        {
            try
            {
                //Bloquear el formulario para que no se pueda hacer nada hasta que termine
                g_frm_PI_Citaciones.Enabled = false;

                //Mostrar la pantalla de espera
                g_frm_PE_Esperando = new PE_Esperando();

                g_bol_Termino_CargaDatos_Inicial = false;

                // Si la tarea asincrona esta en marcha la paro
                if (g_obj_TareaAsincrona_CargarDatos_Listados_Filtros != null)
                {

                    while (g_obj_TareaAsincrona_CargarDatos_Listados_Filtros.IsBusy)
                        Application.DoEvents();

                }
                else
                {
                    g_obj_TareaAsincrona_CargarDatos_Listados_Filtros = new BackgroundWorker();
                    g_obj_TareaAsincrona_CargarDatos_Listados_Filtros.DoWork += new DoWorkEventHandler(TareaAsincrona_CargarDatos_Listados_Filtros_DoWork);
                    g_obj_TareaAsincrona_CargarDatos_Listados_Filtros.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_CargarDatos_Listados_Filtros_ProgressChanged);
                    g_obj_TareaAsincrona_CargarDatos_Listados_Filtros.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_CargarDatos_Listados_Filtros_Completed);
                    g_obj_TareaAsincrona_CargarDatos_Listados_Filtros.WorkerReportsProgress = true;
                }


                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_obj_TareaAsincrona_CargarDatos_Listados_Filtros.RunWorkerAsync();
                //#################################################################################################

                g_frm_PE_Esperando.ShowDialog();
            }
            catch (Exception ex)
            {
                g_frm_PI_Citaciones.Enabled = true;

                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }

                throw new Control_Errores("", ex, nameof(PI_Citaciones_Controladora) + "/" + nameof(CargarDatos_Listados_Filtros), true);
            }
        }
        private void TareaAsincrona_CargarDatos_Listados_Filtros_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            try
            {
                //EPD_Asesores
                g_lst_EPD_Asesores = g_obj_EPD_Asesores_Datos.Obtener_ModeloListado();
                if (g_lst_EPD_Asesores != null && g_lst_EPD_Asesores.Count > 0)
                {
                    foreach (EPD_Asesores mdl_EPD_Asesores in g_lst_EPD_Asesores)
                    {
                        if (mdl_EPD_Asesores.fechaBaja==null)
                        {
                            //Se Cancelo la tarea asincrona #########################
                            if (((BackgroundWorker)sender).CancellationPending)
                            {
                                e.Cancel = true;
                                return;
                            }

                            ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Asesor(mdl_EPD_Asesores,null));

                            //Esperar un poco
                            Thread.Sleep(1);
                        }

                    }
                }

                //EPD_Juzgados
                g_lst_EPD_Juzgados = g_obj_EPD_Juzgados_Datos.Obtener_ModeloListado();
                if (g_lst_EPD_Juzgados != null && g_lst_EPD_Juzgados.Count > 0)
                {
                    foreach (EPD_Juzgados mdl_EPD_Juzgados in g_lst_EPD_Juzgados)
                    {
                        //Se Cancelo la tarea asincrona #########################
                        if (((BackgroundWorker)sender).CancellationPending)
                        {
                            e.Cancel = true;
                            return;
                        }

                        ((BackgroundWorker)sender).ReportProgress(2, Transformar_Modelo_A_Row_Juzgado(mdl_EPD_Juzgados, null));

                        //Esperar un poco
                        Thread.Sleep(1);
                    }
                }
                
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(PI_Citaciones_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_Listados_Filtros_DoWork));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(PI_Citaciones_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_Listados_Filtros_DoWork));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_CargarDatos_Listados_Filtros_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                DataGridViewRow dgrv_Fila = (DataGridViewRow)e.UserState;

                //Asesores
                if (e.ProgressPercentage == 1)
                {
                    g_frm_PI_Citaciones.Exferia_DataGridView_Asesores.Rows.Add(dgrv_Fila);
                }
                //Juzgados
                else if (e.ProgressPercentage == 2)
                {
                    g_frm_PI_Citaciones.Exferia_DataGridView_Juzgados.Rows.Add(dgrv_Fila);
                }
               
            }
            catch (Exception ex)
            {

                Control_Errores.Errores_Log("", ex, nameof(PI_Citaciones_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_Listados_Filtros_ProgressChanged));
            }
        }
        private void TareaAsincrona_CargarDatos_Listados_Filtros_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }

            //Desbloquear el formulario
            g_frm_PI_Citaciones.Enabled = true;

            try
            {
                g_bol_Termino_CargaDatos_Inicial = true;

                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                //Mostrar si tuviera algun mensaje
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                    g_frm_PI_Citaciones.Salir_P_Base();
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(PI_Citaciones_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_Listados_Filtros_Completed));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());

                g_frm_PI_Citaciones.Salir_P_Base();
            }
        }
        #endregion

        #region Rellenar DataGrid Asesores
        public void Rellenar_DataGrid_Asesores(string _str_Buscar)
        {
            try
            {
                if (g_TareaAsincrona_Rellenar_DataGrid_Asesores != null)
                {
                    g_TareaAsincrona_Rellenar_DataGrid_Asesores.CancelAsync();
                    while (g_TareaAsincrona_Rellenar_DataGrid_Asesores.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    g_TareaAsincrona_Rellenar_DataGrid_Asesores = new BackgroundWorker();
                    g_TareaAsincrona_Rellenar_DataGrid_Asesores.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_Asesores_DoWork);
                    g_TareaAsincrona_Rellenar_DataGrid_Asesores.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_Asesores_ProgressChanged);
                    g_TareaAsincrona_Rellenar_DataGrid_Asesores.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_Asesores_Completed);
                    g_TareaAsincrona_Rellenar_DataGrid_Asesores.WorkerReportsProgress = true;
                    g_TareaAsincrona_Rellenar_DataGrid_Asesores.WorkerSupportsCancellation = true;
                }


                //Vaciar el Listado
                g_frm_PI_Citaciones.Exferia_DataGridView_Asesores.Rows.Clear();
                
                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_str_Buscar);
                lst_Argumentos.Add(g_frm_PI_Citaciones.Exferia_CheckBox_Asesores_PalabraCompleta.Checked);
                lst_Argumentos.Add(g_frm_PI_Citaciones.Exferia_CheckBox_Asesores_MayusculasMinusculas.Checked);


                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_TareaAsincrona_Rellenar_DataGrid_Asesores.RunWorkerAsync(lst_Argumentos);
                //#################################################################################################
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, nameof(PI_Citaciones_Controladora) + "/" + nameof(Rellenar_DataGrid_Asesores));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Asesores_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                //Argumentos
                List<object> lst_Argumentos = (List<object>)e.Argument;
                string str_Buscar = (string)lst_Argumentos[0];
                bool bol_PalabraCompleta = (bool)lst_Argumentos[1];
                bool bol_MayusculasMinusculas = (bool)lst_Argumentos[2];


                if (g_lst_EPD_Asesores != null && g_lst_EPD_Asesores.Count > 0)
                {
                    //Primero clono el listado para siempre tener todos los Asesores y solo modificar este
                    List<EPD_Asesores> lst_EPD_Asesores = new List<EPD_Asesores>(g_lst_EPD_Asesores);

                    //Filtrar para mostrar tambien los Asesores de baja
                    if (!g_frm_PI_Citaciones.Exferia_CheckBox_Asesores_DadosDeBaja.Checked)
                    {
                        lst_EPD_Asesores = lst_EPD_Asesores.Where(x => x.fechaBaja == null || x.fechaBaja >= g_frm_PI_Citaciones.P_Base_FechaTrabajo).ToList();
                    }

                    //Tiene Filtro
                    if (str_Buscar.Trim().Length > 0)
                    {
                        //Palabra Completa
                        if (bol_PalabraCompleta)
                        {
                            //Sencible a mayusculas y minusculas
                            if (bol_MayusculasMinusculas)
                            {
                                lst_EPD_Asesores = lst_EPD_Asesores.Where(m => m.nombre == str_Buscar).ToList();
                            }
                            //No tiene en cuenta las mayusculas y las minusculas
                            else
                            {
                                lst_EPD_Asesores = lst_EPD_Asesores.Where(m => m.nombre.ToUpper() == str_Buscar.ToUpper()).ToList();
                            }
                        }
                        //Por Contenido
                        else
                        {
                            //Sencible a mayusculas y minusculas
                            if (bol_MayusculasMinusculas)
                            {
                                lst_EPD_Asesores = lst_EPD_Asesores.Where(m => m.nombre.Contains(str_Buscar)).ToList();
                            }
                            //No tiene en cuenta las mayusculas y las minusculas
                            else
                            {
                                lst_EPD_Asesores = lst_EPD_Asesores.Where(m => m.nombre.ToUpper().Contains(str_Buscar.ToUpper())).ToList();
                            }
                        }

                    }

                    if (lst_EPD_Asesores != null && lst_EPD_Asesores.Count > 0)
                    {
                        foreach (EPD_Asesores mdl_EPD_Asesores in lst_EPD_Asesores.OrderBy(m => m.nombre))
                        {
                            //Se Cancelo la tarea asincrona #########################
                            if (((BackgroundWorker)sender).CancellationPending)
                            {
                                e.Cancel = true;
                                return;
                            }

                        //Añadir al DataGridView
                        ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Asesor(mdl_EPD_Asesores, null));

                            //Esperar un poco
                            Thread.Sleep(1);
                        }
                    }
                }
            }
            catch (ThreadAbortException)
            {
                e.Cancel = true;
            }
            catch (Control_Errores)
            {
                e.Cancel = true;
            }
            catch (Exception)
            {
                e.Cancel = true;
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Asesores_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                if (e.ProgressPercentage == 1)
                {
                    DataGridViewRow dgrv_Fila = (DataGridViewRow)e.UserState;
                    g_frm_PI_Citaciones.Exferia_DataGridView_Asesores.Rows.Add(dgrv_Fila);
                }
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Asesores_Completed(object sender, RunWorkerCompletedEventArgs e)
        { }

        public DataGridViewRow Transformar_Modelo_A_Row_Asesor(EPD_Asesores _mdl_EPD_Asesores, DataGridViewRow _obj_DataGridViewRow)
        {
            DataGridViewRow obj_DataGridViewRow = _obj_DataGridViewRow;

            if (obj_DataGridViewRow == null)
            {
                obj_DataGridViewRow = (DataGridViewRow)g_frm_PI_Citaciones.Exferia_DataGridView_Asesores.RowTemplate.Clone();
                obj_DataGridViewRow.CreateCells(g_frm_PI_Citaciones.Exferia_DataGridView_Asesores);
            }

            //id
            obj_DataGridViewRow.Cells[0].Value = _mdl_EPD_Asesores.id;

            //check
            if (g_lst_Asesores_Seleccionados.Count > 0 &&
                g_lst_Asesores_Seleccionados.Exists(m => m.Equals(_mdl_EPD_Asesores.id)))
            {
                obj_DataGridViewRow.Cells[1].Value = 1;
            }
            else
            {
                obj_DataGridViewRow.Cells[1].Value = 0;
            }
           
            //nombre
            obj_DataGridViewRow.Cells[2].Value = _mdl_EPD_Asesores.nombre;

            return obj_DataGridViewRow;
        }
        #endregion

        #region Rellenar DataGrid Juzgados
        public void Rellenar_DataGrid_Juzgados(string _str_Buscar)
        {
            try
            {
                if (g_TareaAsincrona_Rellenar_DataGrid_Juzgados != null)
                {
                    g_TareaAsincrona_Rellenar_DataGrid_Juzgados.CancelAsync();
                    while (g_TareaAsincrona_Rellenar_DataGrid_Juzgados.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    g_TareaAsincrona_Rellenar_DataGrid_Juzgados = new BackgroundWorker();
                    g_TareaAsincrona_Rellenar_DataGrid_Juzgados.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_Juzgados_DoWork);
                    g_TareaAsincrona_Rellenar_DataGrid_Juzgados.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_Juzgados_ProgressChanged);
                    g_TareaAsincrona_Rellenar_DataGrid_Juzgados.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_Juzgados_Completed);
                    g_TareaAsincrona_Rellenar_DataGrid_Juzgados.WorkerReportsProgress = true;
                    g_TareaAsincrona_Rellenar_DataGrid_Juzgados.WorkerSupportsCancellation = true;
                }


                //Vaciar el Listado
                g_frm_PI_Citaciones.Exferia_DataGridView_Juzgados.Rows.Clear();

                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_str_Buscar);
                lst_Argumentos.Add(g_frm_PI_Citaciones.Exferia_CheckBox_Juzgados_PalabraCompleta.Checked);
                lst_Argumentos.Add(g_frm_PI_Citaciones.Exferia_CheckBox_Juzgados_MayusculasMinusculas.Checked);


                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_TareaAsincrona_Rellenar_DataGrid_Juzgados.RunWorkerAsync(lst_Argumentos);
                //#################################################################################################
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, nameof(PI_Citaciones_Controladora) + "/" + nameof(Rellenar_DataGrid_Juzgados));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Juzgados_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                //Argumentos
                List<object> lst_Argumentos = (List<object>)e.Argument;
                string str_Buscar = (string)lst_Argumentos[0];
                bool bol_PalabraCompleta = (bool)lst_Argumentos[1];
                bool bol_MayusculasMinusculas = (bool)lst_Argumentos[2];


                if (g_lst_EPD_Juzgados != null && g_lst_EPD_Juzgados.Count > 0)
                {
                    //Primero clono el listado para siempre tener todos los Juzgado y solo modificar este
                    List<EPD_Juzgados> lst_EPD_Juzgados = new List<EPD_Juzgados>(g_lst_EPD_Juzgados);

                    //Tiene Filtro
                    if (str_Buscar.Trim().Length > 0)
                    {
                        //Palabra Completa
                        if (bol_PalabraCompleta)
                        {
                            //Sencible a mayusculas y minusculas
                            if (bol_MayusculasMinusculas)
                            {
                                lst_EPD_Juzgados = lst_EPD_Juzgados.Where(m => m.descripcion == str_Buscar).ToList();
                            }
                            //No tiene en cuenta las mayusculas y las minusculas
                            else
                            {
                                lst_EPD_Juzgados = lst_EPD_Juzgados.Where(m => m.descripcion.ToUpper() == str_Buscar.ToUpper()).ToList();
                            }
                        }
                        //Por Contenido
                        else
                        {
                            //Sencible a mayusculas y minusculas
                            if (bol_MayusculasMinusculas)
                            {
                                lst_EPD_Juzgados = lst_EPD_Juzgados.Where(m => m.descripcion.Contains(str_Buscar)).ToList();
                            }
                            //No tiene en cuenta las mayusculas y las minusculas
                            else
                            {
                                lst_EPD_Juzgados = lst_EPD_Juzgados.Where(m => m.descripcion.ToUpper().Contains(str_Buscar.ToUpper())).ToList();
                            }
                        }

                    }

                    if (lst_EPD_Juzgados != null && lst_EPD_Juzgados.Count > 0)
                    {
                        foreach (EPD_Juzgados mdl_EPD_Juzgados in lst_EPD_Juzgados.OrderBy(m => m.descripcion))
                        {
                            //Se Cancelo la tarea asincrona #########################
                            if (((BackgroundWorker)sender).CancellationPending)
                            {
                                e.Cancel = true;
                                return;
                            }

                        //Añadir al DataGridView
                        ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Juzgado(mdl_EPD_Juzgados, null));

                            //Esperar un poco
                            Thread.Sleep(1);
                        }
                    }
                }
            }
            catch (ThreadAbortException)
            {
                e.Cancel = true;
            }
            catch (Control_Errores)
            {
                e.Cancel = true;
            }
            catch (Exception)
            {
                e.Cancel = true;
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Juzgados_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                if (e.ProgressPercentage == 1)
                {
                    DataGridViewRow dgrv_Fila = (DataGridViewRow)e.UserState;
                    g_frm_PI_Citaciones.Exferia_DataGridView_Juzgados.Rows.Add(dgrv_Fila);
                }
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Juzgados_Completed(object sender, RunWorkerCompletedEventArgs e)
        { }

        public DataGridViewRow Transformar_Modelo_A_Row_Juzgado(EPD_Juzgados _mdl_EPD_Juzgados, DataGridViewRow _obj_DataGridViewRow)
        {
            DataGridViewRow obj_DataGridViewRow = _obj_DataGridViewRow;

            if (obj_DataGridViewRow == null)
            {
                obj_DataGridViewRow = (DataGridViewRow)g_frm_PI_Citaciones.Exferia_DataGridView_Juzgados.RowTemplate.Clone();
                obj_DataGridViewRow.CreateCells(g_frm_PI_Citaciones.Exferia_DataGridView_Juzgados);
            }

            //id
            obj_DataGridViewRow.Cells[0].Value = _mdl_EPD_Juzgados.id;

            //check
            if (g_lst_Juzgados_Seleccionados.Count > 0 &&
                g_lst_Juzgados_Seleccionados.Exists(m => m.Equals(_mdl_EPD_Juzgados.id)))
            {
                obj_DataGridViewRow.Cells[1].Value = 1;
            }
            else
            {
                obj_DataGridViewRow.Cells[1].Value = 0;
            }

            //descripcion
            obj_DataGridViewRow.Cells[2].Value = _mdl_EPD_Juzgados.descripcion;

            return obj_DataGridViewRow;
        }
        #endregion

        #region Generar Informe
        public void Generar_Informe()
        {
            try
            {
                //Bloquear el formulario para que no se pueda hacer nada hasta que termine
                g_frm_PI_Citaciones.Enabled = false;

                //Mostrar la pantalla de espera
                g_frm_PE_Esperando = new PE_Esperando();

                // Si la tarea asincrona esta en marcha la paro
                if (g_obj_TareaAsincrona_GenerarInformes != null)
                {
                    g_bol_Cancelar_TareaAsincrona_GenerarInformes = true;

                    while (g_obj_TareaAsincrona_GenerarInformes.IsBusy)
                        Application.DoEvents();

                }
                else
                {
                    g_obj_TareaAsincrona_GenerarInformes = new BackgroundWorker();
                    g_obj_TareaAsincrona_GenerarInformes.DoWork += new DoWorkEventHandler(TareaAsincrona_GenerarInformes_DoWork);
                    g_obj_TareaAsincrona_GenerarInformes.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_GenerarInformes_ProgressChanged);
                    g_obj_TareaAsincrona_GenerarInformes.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_GenerarInformes_Completed);
                    g_obj_TareaAsincrona_GenerarInformes.WorkerReportsProgress = true;
                }

                //Vaciar Tabs
                g_frm_PI_Citaciones.Exferia_TabControl_Citaciones.TabPages.Clear();
                g_lst_INTERNO_Informe_Citaciones_Modelo = null;
                g_lst_DataGridViews_Generados.Clear();
                g_dtt_Valor_Anterior = null;

                //Crear DataGridViews por Juzgado
                if (g_frm_PI_Citaciones.Exferia_RadioButton_Agrupado_Juzgado.Checked)
                {
                    //Listado de Juzgados Seleccionados
                    if (g_lst_Juzgados_Seleccionados.Count>0)
                    {
                        foreach (DataGridViewRow dgvr_Filas in g_frm_PI_Citaciones.Exferia_DataGridView_Juzgados.Rows
                                                                                .Cast<DataGridViewRow>()
                                                                                .Where(r => r.Cells[1].Value.ToString().Equals("1")).ToList())
                        {
                            Crear_Tab_Nuevo(long.Parse(dgvr_Filas.Cells[0].Value.ToString()), dgvr_Filas.Cells[2].Value.ToString());
                        }
                    }
                    //Al no tener ninguno seleccionado, son todos
                    else
                    {
                        foreach (DataGridViewRow dgvr_Filas in g_frm_PI_Citaciones.Exferia_DataGridView_Juzgados.Rows
                                                                                .Cast<DataGridViewRow>().ToList())
                        {
                            Crear_Tab_Nuevo(long.Parse(dgvr_Filas.Cells[0].Value.ToString()), dgvr_Filas.Cells[2].Value.ToString());
                        }
                    }
                }
                //Crear DataGridViews por Asesor
                else if (g_frm_PI_Citaciones.Exferia_RadioButton_Agrupado_Asesor.Checked)
                {
                    //Listado de Asesores Seleccionados
                    if (g_lst_Asesores_Seleccionados.Count > 0)
                    {
                        foreach (DataGridViewRow dgvr_Filas in g_frm_PI_Citaciones.Exferia_DataGridView_Asesores.Rows
                                                                               .Cast<DataGridViewRow>()
                                                                               .Where(r => r.Cells[1].Value.ToString().Equals("1")).ToList())
                        {
                            Crear_Tab_Nuevo(long.Parse(dgvr_Filas.Cells[0].Value.ToString()), dgvr_Filas.Cells[2].Value.ToString());
                        }
                    }
                    //Al no tener ninguno seleccionado, son todos
                    else
                    {
                        foreach (DataGridViewRow dgvr_Filas in g_frm_PI_Citaciones.Exferia_DataGridView_Asesores.Rows
                                                                               .Cast<DataGridViewRow>().ToList())
                        {
                            Crear_Tab_Nuevo(long.Parse(dgvr_Filas.Cells[0].Value.ToString()), dgvr_Filas.Cells[2].Value.ToString());
                        }
                    }


                }
                //Crear DataGridViews sin agrupar
                else
                {
                    Crear_Tab_Nuevo(-1, "Todos");
                }
                
                g_bol_Cancelar_TareaAsincrona_GenerarInformes = false;

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_obj_TareaAsincrona_GenerarInformes.RunWorkerAsync();
                //#################################################################################################

                g_frm_PE_Esperando.ShowDialog();
            }
            catch (Exception ex)
            {
                g_frm_PI_Citaciones.Enabled = true;


                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }

                Control_Errores.Errores_Log("", ex, nameof(PI_Citaciones_Controladora) + "/" + nameof(Generar_Informe));
            }
        }

        private void TareaAsincrona_GenerarInformes_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_ValorDevuelto_Modelo.Objeto = null;

            try
            {
                List<Exferia_DataGridView> lst_Listado_DataGridView = new List<Exferia_DataGridView>();

                // Validar Primero
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_VALIDACION = ValidarDatos();
                if (mdl_ValorDevuelto_Modelo_VALIDACION.TodoCorrecto)
                {
                    //Cargar Valores
                    if (CargarDatos_Datos_Citaciones() == false)
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
                    }
                    else
                    {
                        if (g_lst_INTERNO_Informe_Citaciones_Modelo != null)
                        {
                            //Por Juzgados
                            if (g_frm_PI_Citaciones.Exferia_RadioButton_Agrupado_Juzgado.Checked)
                            {
                                long lng_idJuzgado = -1;
                                //Recorrer los Juzgados seleccionados
                                foreach (string str_DataGridView_Generado in g_lst_DataGridViews_Generados)
                                {
                                    //Buscar el DataGridView del juzgado en cuestion
                                    Exferia_DataGridView ex_dgv_Juzgado = (Exferia_DataGridView)g_frm_PI_Citaciones.Exferia_TabControl_Citaciones.Controls.Find(str_DataGridView_Generado, true).FirstOrDefault();
                                    if (ex_dgv_Juzgado != null)
                                    {
                                        //Añadir DataGridView
                                        lst_Listado_DataGridView.Add(ex_dgv_Juzgado);

                                        //Fechas
                                        DateTime dtt_FechaHora_Inicio = DateTime.ParseExact(g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaInicio.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                                        DateTime dtt_FechaHora_Fin = DateTime.ParseExact(g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaFin.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture);

                                        //idJuzgado .....................................................................
                                        lng_idJuzgado = long.Parse(ex_dgv_Juzgado.Tag.ToString());
                                        //...............................................................................

                                        while (dtt_FechaHora_Inicio <= dtt_FechaHora_Fin)
                                        {
                                            #region Fila de Fecha
                                            INTERNO_Informe_Citaciones_Modelo mdl_INTERNO_Informe_Citaciones_Modelo_FECHA = new INTERNO_Informe_Citaciones_Modelo();
                                            mdl_INTERNO_Informe_Citaciones_Modelo_FECHA.Tipo = 0;
                                            mdl_INTERNO_Informe_Citaciones_Modelo_FECHA.Citacion_Fecha = dtt_FechaHora_Inicio;
                                            mdl_INTERNO_Informe_Citaciones_Modelo_FECHA.Citacion_Hora = "-1";
                                            List<object> lst_Argumentos_Progress_FECHA = new List<object>();
                                            lst_Argumentos_Progress_FECHA.Add(ex_dgv_Juzgado);
                                            lst_Argumentos_Progress_FECHA.Add(Transformar_Modelo_A_Row_Citaciones(mdl_INTERNO_Informe_Citaciones_Modelo_FECHA));
                                            ((BackgroundWorker)sender).ReportProgress(1, lst_Argumentos_Progress_FECHA);
                                            #endregion

                                            #region Fila Cabecera
                                            INTERNO_Informe_Citaciones_Modelo mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA = new INTERNO_Informe_Citaciones_Modelo();
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Tipo = 1;
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Juzgado_Id = -1;
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Juzgado_Descripcion = "Juzgado";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Citacion_Hora = "Hora";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Citacion_Observaciones = "Observaciones";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Procedimiento_Numero = "Nº Procedimiento";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Actores = "Actores";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Demandado = "Demandado";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Materia = "Materia";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Asesor_Id = -1;
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Asesor_Nombre = "Asesor";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Expediente_Codigo = "Nº Expediente";

                                            List<object> lst_Argumentos_Progress_CABECERA = new List<object>();
                                            lst_Argumentos_Progress_CABECERA.Add(ex_dgv_Juzgado);
                                            lst_Argumentos_Progress_CABECERA.Add(Transformar_Modelo_A_Row_Citaciones(mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA));
                                            ((BackgroundWorker)sender).ReportProgress(1, lst_Argumentos_Progress_CABECERA);
                                            #endregion

                                            //Filtrar listado
                                            List<INTERNO_Informe_Citaciones_Modelo> lst_INTERNO_Informe_Citaciones_Modelo = g_lst_INTERNO_Informe_Citaciones_Modelo.Where(m => m.Citacion_Fecha.Date == dtt_FechaHora_Inicio && m.Juzgado_Id.Equals(lng_idJuzgado)).ToList();
                                            if (lst_INTERNO_Informe_Citaciones_Modelo != null && lst_INTERNO_Informe_Citaciones_Modelo.Count > 0)
                                            {
                                                foreach (INTERNO_Informe_Citaciones_Modelo mdl_INTERNO_Informe_Citaciones_Modelo in lst_INTERNO_Informe_Citaciones_Modelo.OrderBy(m => m.Citacion_FechaHora))
                                                {
                                                    //Se cancelo la tareaAsincrona
                                                    if (g_bol_Cancelar_TareaAsincrona_GenerarInformes)
                                                    {
                                                        return;
                                                    }

                                                    //Tipo
                                                    mdl_INTERNO_Informe_Citaciones_Modelo.Tipo = 2;

                                                    //Añadir los argumentos
                                                    List<object> lst_Argumentos_Progress = new List<object>();
                                                    lst_Argumentos_Progress.Add(ex_dgv_Juzgado);
                                                    lst_Argumentos_Progress.Add(Transformar_Modelo_A_Row_Citaciones(mdl_INTERNO_Informe_Citaciones_Modelo));

                                                    ((BackgroundWorker)sender).ReportProgress(1, lst_Argumentos_Progress);

                                                    //Application.DoEvents();
                                                    Thread.Sleep(5);
                                                }
                                            }

                                            //Añadir un dia a la fecha Inicio
                                            dtt_FechaHora_Inicio = dtt_FechaHora_Inicio.AddDays(1);
                                        }
                                    }
                                }
                            }
                            //Por Asesor
                            else if (g_frm_PI_Citaciones.Exferia_RadioButton_Agrupado_Asesor.Checked)
                            {
                                long lng_idAsesor = -1;
                                //Recorrer los Asesores seleccionados
                                foreach (string str_DataGridView_Generado in g_lst_DataGridViews_Generados)
                                {
                                    //Buscar el DataGridView del Asesor en cuestion
                                    Exferia_DataGridView ex_dgv_Asesor = (Exferia_DataGridView)g_frm_PI_Citaciones.Exferia_TabControl_Citaciones.Controls.Find(str_DataGridView_Generado, true).FirstOrDefault();
                                    if (ex_dgv_Asesor != null)
                                    {
                                        //Añadir DataGridView
                                        lst_Listado_DataGridView.Add(ex_dgv_Asesor);

                                        //Fechas
                                        DateTime dtt_FechaHora_Inicio = DateTime.ParseExact(g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaInicio.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                                        DateTime dtt_FechaHora_Fin = DateTime.ParseExact(g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaFin.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture);

                                        //idAsesor .....................................................................
                                        lng_idAsesor = long.Parse(ex_dgv_Asesor.Tag.ToString());
                                        //...............................................................................

                                        while (dtt_FechaHora_Inicio<=dtt_FechaHora_Fin)
                                        {
                                            #region Fila de Fecha
                                            INTERNO_Informe_Citaciones_Modelo mdl_INTERNO_Informe_Citaciones_Modelo_FECHA = new INTERNO_Informe_Citaciones_Modelo();
                                            mdl_INTERNO_Informe_Citaciones_Modelo_FECHA.Tipo = 0;
                                            mdl_INTERNO_Informe_Citaciones_Modelo_FECHA.Citacion_Fecha = dtt_FechaHora_Inicio;
                                            mdl_INTERNO_Informe_Citaciones_Modelo_FECHA.Citacion_Hora = "-1";
                                            List<object> lst_Argumentos_Progress_FECHA = new List<object>();
                                            lst_Argumentos_Progress_FECHA.Add(ex_dgv_Asesor);
                                            lst_Argumentos_Progress_FECHA.Add(Transformar_Modelo_A_Row_Citaciones(mdl_INTERNO_Informe_Citaciones_Modelo_FECHA));
                                            ((BackgroundWorker)sender).ReportProgress(2, lst_Argumentos_Progress_FECHA);
                                            #endregion

                                            #region Fila Cabecera
                                            INTERNO_Informe_Citaciones_Modelo mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA = new INTERNO_Informe_Citaciones_Modelo();
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Tipo = 1;
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Juzgado_Id = -1;
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Juzgado_Descripcion = "Juzgado";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Citacion_Hora = "Hora";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Citacion_Observaciones = "Observaciones";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Procedimiento_Numero = "Nº Procedimiento";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Actores = "Actores";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Demandado = "Demandado";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Materia = "Materia";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Asesor_Id = -1;
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Asesor_Nombre = "Asesor";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Expediente_Codigo = "Nº Expediente";

                                            List<object> lst_Argumentos_Progress_CABECERA = new List<object>();
                                            lst_Argumentos_Progress_CABECERA.Add(ex_dgv_Asesor);
                                            lst_Argumentos_Progress_CABECERA.Add(Transformar_Modelo_A_Row_Citaciones(mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA));
                                            ((BackgroundWorker)sender).ReportProgress(2, lst_Argumentos_Progress_CABECERA);
                                            #endregion

                                            //Filtrar listado
                                            List<INTERNO_Informe_Citaciones_Modelo> lst_INTERNO_Informe_Citaciones_Modelo = g_lst_INTERNO_Informe_Citaciones_Modelo.Where(m => m.Citacion_Fecha.Date== dtt_FechaHora_Inicio && m.Asesor_Id.Equals(lng_idAsesor)).ToList();
                                            if (lst_INTERNO_Informe_Citaciones_Modelo != null && lst_INTERNO_Informe_Citaciones_Modelo.Count > 0)
                                            {
                                                foreach (INTERNO_Informe_Citaciones_Modelo mdl_INTERNO_Informe_Citaciones_Modelo in lst_INTERNO_Informe_Citaciones_Modelo.OrderBy(m=>m.Citacion_FechaHora))
                                                {
                                                    //Se cancelo la tareaAsincrona
                                                    if (g_bol_Cancelar_TareaAsincrona_GenerarInformes)
                                                    {
                                                        return;
                                                    }

                                                    //Tipo
                                                    mdl_INTERNO_Informe_Citaciones_Modelo.Tipo = 2;

                                                    //Añadir los argumentos
                                                    List<object> lst_Argumentos_Progress = new List<object>();
                                                    lst_Argumentos_Progress.Add(ex_dgv_Asesor);
                                                    lst_Argumentos_Progress.Add(Transformar_Modelo_A_Row_Citaciones(mdl_INTERNO_Informe_Citaciones_Modelo));

                                                    ((BackgroundWorker)sender).ReportProgress(2, lst_Argumentos_Progress);

                                                    //Application.DoEvents();
                                                    Thread.Sleep(5);
                                                }
                                            }

                                            //Añadir un dia a la fecha Inicio
                                            dtt_FechaHora_Inicio = dtt_FechaHora_Inicio.AddDays(1);
                                        }
                                    }
                                }
                            }
                            //Todos
                            else
                            {
                                //Recorrer los Asesores seleccionados
                                foreach (string str_DataGridView_Generado in g_lst_DataGridViews_Generados)
                                {
                                    //Buscar el DataGridView del Asesor en cuestion
                                    Exferia_DataGridView ex_dgv_Asesor = (Exferia_DataGridView)g_frm_PI_Citaciones.Exferia_TabControl_Citaciones.Controls.Find(str_DataGridView_Generado, true).FirstOrDefault();
                                    if (ex_dgv_Asesor != null)
                                    {
                                        //Añadir DataGridView
                                        lst_Listado_DataGridView.Add(ex_dgv_Asesor);

                                        //Fechas
                                        DateTime dtt_FechaHora_Inicio = DateTime.ParseExact(g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaInicio.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                                        DateTime dtt_FechaHora_Fin = DateTime.ParseExact(g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaFin.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture);

                                        while (dtt_FechaHora_Inicio <= dtt_FechaHora_Fin)
                                        {
                                            #region Fila de Fecha
                                            INTERNO_Informe_Citaciones_Modelo mdl_INTERNO_Informe_Citaciones_Modelo_FECHA = new INTERNO_Informe_Citaciones_Modelo();
                                            mdl_INTERNO_Informe_Citaciones_Modelo_FECHA.Tipo = 0;
                                            mdl_INTERNO_Informe_Citaciones_Modelo_FECHA.Citacion_Fecha = dtt_FechaHora_Inicio;
                                            mdl_INTERNO_Informe_Citaciones_Modelo_FECHA.Citacion_Hora = "-1";
                                            List<object> lst_Argumentos_Progress_FECHA = new List<object>();
                                            lst_Argumentos_Progress_FECHA.Add(ex_dgv_Asesor);
                                            lst_Argumentos_Progress_FECHA.Add(Transformar_Modelo_A_Row_Citaciones(mdl_INTERNO_Informe_Citaciones_Modelo_FECHA));
                                            ((BackgroundWorker)sender).ReportProgress(2, lst_Argumentos_Progress_FECHA);
                                            #endregion

                                            #region Fila Cabecera
                                            INTERNO_Informe_Citaciones_Modelo mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA = new INTERNO_Informe_Citaciones_Modelo();
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Tipo = 1;
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Juzgado_Id = -1;
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Juzgado_Descripcion = "Juzgado";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Citacion_Hora = "Hora";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Citacion_Observaciones = "Observaciones";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Procedimiento_Numero = "Nº Procedimiento";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Actores = "Actores";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Demandado = "Demandado";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Materia = "Materia";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Asesor_Id = -1;
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Asesor_Nombre = "Asesor";
                                            mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA.Expediente_Codigo = "Nº Expediente";

                                            List<object> lst_Argumentos_Progress_CABECERA = new List<object>();
                                            lst_Argumentos_Progress_CABECERA.Add(ex_dgv_Asesor);
                                            lst_Argumentos_Progress_CABECERA.Add(Transformar_Modelo_A_Row_Citaciones(mdl_INTERNO_Informe_Citaciones_Modelo_CABECERA));
                                            ((BackgroundWorker)sender).ReportProgress(2, lst_Argumentos_Progress_CABECERA);
                                            #endregion

                                            //Filtrar listado
                                            List<INTERNO_Informe_Citaciones_Modelo> lst_INTERNO_Informe_Citaciones_Modelo = g_lst_INTERNO_Informe_Citaciones_Modelo.Where(m => m.Citacion_Fecha.Date == dtt_FechaHora_Inicio).ToList();
                                            if (lst_INTERNO_Informe_Citaciones_Modelo != null && lst_INTERNO_Informe_Citaciones_Modelo.Count > 0)
                                            {
                                                foreach (INTERNO_Informe_Citaciones_Modelo mdl_INTERNO_Informe_Citaciones_Modelo in lst_INTERNO_Informe_Citaciones_Modelo.OrderBy(m => m.Citacion_FechaHora))
                                                {
                                                    //Se cancelo la tareaAsincrona
                                                    if (g_bol_Cancelar_TareaAsincrona_GenerarInformes)
                                                    {
                                                        return;
                                                    }

                                                    //Tipo
                                                    mdl_INTERNO_Informe_Citaciones_Modelo.Tipo = 2;

                                                    //Añadir los argumentos
                                                    List<object> lst_Argumentos_Progress = new List<object>();
                                                    lst_Argumentos_Progress.Add(ex_dgv_Asesor);
                                                    lst_Argumentos_Progress.Add(Transformar_Modelo_A_Row_Citaciones(mdl_INTERNO_Informe_Citaciones_Modelo));

                                                    ((BackgroundWorker)sender).ReportProgress(2, lst_Argumentos_Progress);

                                                    //Application.DoEvents();
                                                    Thread.Sleep(5);
                                                }
                                            }

                                            //Añadir un dia a la fecha Inicio
                                            dtt_FechaHora_Inicio = dtt_FechaHora_Inicio.AddDays(1);
                                        }
                                    }
                                }
                            }

                            //Añadir los DataGridView
                            mdl_ValorDevuelto_Modelo.Objeto = lst_Listado_DataGridView;

                        }
                    }
                }
                else
                {
                    mdl_ValorDevuelto_Modelo = mdl_ValorDevuelto_Modelo_VALIDACION;
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(PI_Citaciones_Controladora) + "/" + nameof(TareaAsincrona_GenerarInformes_DoWork));
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(PI_Citaciones_Controladora) + "/" + nameof(TareaAsincrona_GenerarInformes_DoWork));
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_GenerarInformes_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                //Juzgados
                if (e.ProgressPercentage == 1)
                {
                    List<object> lst_Argumentos_Progress = (List<object>)e.UserState;

                    Exferia_DataGridView dgv_Juzgados = (Exferia_DataGridView)lst_Argumentos_Progress[0];

                    dgv_Juzgados.Rows.Add((object[])lst_Argumentos_Progress[1]);
                }
                //Asesores
                else if (e.ProgressPercentage == 2)
                {
                    List<object> lst_Argumentos_Progress = (List<object>)e.UserState;

                    Exferia_DataGridView dgv_Asesores = (Exferia_DataGridView)lst_Argumentos_Progress[0];

                    dgv_Asesores.Rows.Add((object[])lst_Argumentos_Progress[1]);
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(PI_Citaciones_Controladora) + "/" + nameof(TareaAsincrona_GenerarInformes_ProgressChanged));
            }
        }
        private void TareaAsincrona_GenerarInformes_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }

            //Desbloquear el formulario
            g_frm_PI_Citaciones.Enabled = true;

            try
            {
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                //Mostrar si tuviera algun mensaje
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                }
                else
                {
                    //Esto se hace solo en la primera carga
                    if (g_lst_ColumnasAMostrar_Informe != null &&
                        g_lst_ColumnasAMostrar_Informe.Count == 0)
                    {
                        g_lst_ColumnasAMostrar_Informe = new List<string>(g_lst_ColumnasAMostrar_Informe_PrimeraCarga);
                    }

                    #region Codigo para que el ScrollView Vertical salga correcto
                    if (mdl_ValorDevuelto_Modelo_Resultado.Objeto!=null)
                    {
                        List<Exferia_DataGridView> lst_Listado_DataGridView = (List<Exferia_DataGridView>)mdl_ValorDevuelto_Modelo_Resultado.Objeto;

                        foreach (Exferia_DataGridView ex_dgv_Nuevo in lst_Listado_DataGridView)
                        {
                            ex_dgv_Nuevo.SuspendLayout();
                            ex_dgv_Nuevo.ResumeLayout();
                        }
                    }
                    #endregion

                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(PI_Citaciones_Controladora) + "/" + nameof(TareaAsincrona_GenerarInformes_Completed));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());
            }
        }

        public object[] Transformar_Modelo_A_Row_Citaciones(INTERNO_Informe_Citaciones_Modelo _mdl_INTERNO_Informe_Citaciones_Modelo)
        {
            object[] arr_fila = new object[g_obj_ABS_Listado_Citaciones_Informe.LISTADO_COLUMNAS().Count];
            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_obj_ABS_Listado_Citaciones_Informe.LISTADO_COLUMNAS().Values)
            {
                //Segun el Tipo
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                {
                    DateTime? dtt_Valor = (DateTime?)_mdl_INTERNO_Informe_Citaciones_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_Informe_Citaciones_Modelo, null);
                    if (dtt_Valor != null &&
                        dtt_Valor != g_dtt_Valor_Anterior)
                    {
                        arr_fila[int_ContadorFila] = dtt_Valor.Value;
                        g_dtt_Valor_Anterior = dtt_Valor;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.HORASIMPLE))
                {
                    TimeSpan? tms_Valor = (TimeSpan?)_mdl_INTERNO_Informe_Citaciones_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_Informe_Citaciones_Modelo, null);
                    if (tms_Valor != null)
                    {
                        arr_fila[int_ContadorFila] = tms_Valor.Value;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.HORACOMPLETA))
                {
                    TimeSpan? tms_Valor = (TimeSpan?)_mdl_INTERNO_Informe_Citaciones_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_Informe_Citaciones_Modelo, null);
                    if (tms_Valor != null)
                    {
                        arr_fila[int_ContadorFila] = tms_Valor.Value;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.BOOLEAN))
                {
                    bool? bol_Valor = (bool?)_mdl_INTERNO_Informe_Citaciones_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_Informe_Citaciones_Modelo, null);
                    arr_fila[int_ContadorFila] = bol_Valor != null && bol_Valor.Value ? "X" : "";
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DECIMAL))
                {
                    decimal? dcm_valor = (decimal?)_mdl_INTERNO_Informe_Citaciones_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_Informe_Citaciones_Modelo, null);
                    if (dcm_valor != null)
                    {
                        arr_fila[int_ContadorFila] = dcm_valor;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG))
                {
                    long? lng_valor = (long?)_mdl_INTERNO_Informe_Citaciones_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_Informe_Citaciones_Modelo, null);
                    if (lng_valor != null)
                    {
                        arr_fila[int_ContadorFila] = lng_valor;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG_TEXT))
                {
                    string str_Valor = (string)_mdl_INTERNO_Informe_Citaciones_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_Informe_Citaciones_Modelo, null);

                    long? lng_valor = long.Parse(str_Valor);
                    if (lng_valor != null)
                    {
                        arr_fila[int_ContadorFila] = lng_valor;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.INT))
                {
                    int? int_valor = (int?)_mdl_INTERNO_Informe_Citaciones_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_Informe_Citaciones_Modelo, null);
                    if (int_valor != null)
                    {
                        arr_fila[int_ContadorFila] = int_valor;
                    }
                }
                else
                {
                    arr_fila[int_ContadorFila] = _mdl_INTERNO_Informe_Citaciones_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_Informe_Citaciones_Modelo, null);
                }

                int_ContadorFila += 1;
            }

            return arr_fila;
        }

        public INTERNO_ValorDevuelto_Modelo ValidarDatos()
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                //La Fecha de Inicio no puede estar vacia
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_FechaHora_Respuesta = Funciones.Fecha_Validacion(g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaInicio.Exferia_FechaSeleccion_Fecha.Trim(' ', '/'));

                    if (int_FechaHora_Respuesta == 1)//Vacia
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaInicio.Exferia_FechaSeleccion_Descripcion);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaInicio;
                    }
                    else if (int_FechaHora_Respuesta == 2)
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaInicio.Exferia_FechaSeleccion_Descripcion);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaInicio;
                    }
                }

                //La Hora de Inicio no puede estar vacia
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_FechaHora_Respuesta = Funciones.Hora_Validacion(g_frm_PI_Citaciones.Exferia_TextBox_ConMascara_HoraInicio.Text);

                    if (int_FechaHora_Respuesta == 1)//Vacia
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_PI_Citaciones.Exferia_Label_HoraInicio.Text);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_PI_Citaciones.Exferia_TextBox_ConMascara_HoraInicio;
                    }
                    else if (int_FechaHora_Respuesta == 2)
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_PI_Citaciones.Exferia_Label_HoraInicio.Text);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_PI_Citaciones.Exferia_TextBox_ConMascara_HoraInicio;
                    }
                }

                //La Fecha Fin no puede estar vacia
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_FechaHora_Respuesta = Funciones.Fecha_Validacion(g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaFin.Exferia_FechaSeleccion_Fecha.Trim(' ', '/'));

                    if (int_FechaHora_Respuesta == 1)//Vacia
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaFin.Exferia_FechaSeleccion_Descripcion);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaFin;
                    }
                    else if (int_FechaHora_Respuesta == 2)
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaFin.Exferia_FechaSeleccion_Descripcion);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaFin;
                    }
                }

                //La Hora Fin no puede estar vacia
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_FechaHora_Respuesta = Funciones.Hora_Validacion(g_frm_PI_Citaciones.Exferia_TextBox_ConMascara_HoraFin.Text);

                    if (int_FechaHora_Respuesta == 1)//Vacia
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_PI_Citaciones.Exferia_Label_HoraFin.Text);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_PI_Citaciones.Exferia_TextBox_ConMascara_HoraFin;
                    }
                    else if (int_FechaHora_Respuesta == 2)
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_PI_Citaciones.Exferia_Label_HoraFin.Text);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_PI_Citaciones.Exferia_TextBox_ConMascara_HoraFin;
                    }
                }

                //La fecha/Hora de inicio no puede ser mayor que la fecha/Hora Fin
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    DateTime dtt_FechaHora_Inicio = DateTime.ParseExact(g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaInicio.Exferia_FechaSeleccion_Fecha + " " + g_frm_PI_Citaciones.Exferia_TextBox_ConMascara_HoraInicio.Text, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);
                    DateTime dtt_FechaHora_Fin = DateTime.ParseExact(g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaFin.Exferia_FechaSeleccion_Fecha + " " + g_frm_PI_Citaciones.Exferia_TextBox_ConMascara_HoraFin.Text, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);

                    if (dtt_FechaHora_Inicio> dtt_FechaHora_Fin)
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_MAYORQUEOTRAAFECHA(g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaInicio.Exferia_FechaSeleccion_Descripcion, g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaFin.Exferia_FechaSeleccion_Descripcion);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaFin;
                    }
                }
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(PI_Citaciones_Controladora) + "/" + nameof(ValidarDatos));

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }

            return mdl_ValorDevuelto_Modelo;
        }

        public bool CargarDatos_Datos_Citaciones()
        {
            bool bol_ValorDevuelto = true;

            try
            {
                DateTime dtt_FechaHora_Inicio = DateTime.ParseExact(g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaInicio.Exferia_FechaSeleccion_Fecha + " " + g_frm_PI_Citaciones.Exferia_TextBox_ConMascara_HoraInicio.Text, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);
                DateTime dtt_FechaHora_Fin = DateTime.ParseExact(g_frm_PI_Citaciones.Exferia_FechaSeleccion_FechaFin.Exferia_FechaSeleccion_Fecha + " " + g_frm_PI_Citaciones.Exferia_TextBox_ConMascara_HoraFin.Text, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);

                //Obtener Citaciones
                g_lst_INTERNO_Informe_Citaciones_Modelo = g_obj_EPD_Citaciones_Datos.Obtener_Informe_Citaciones(dtt_FechaHora_Inicio, dtt_FechaHora_Fin,g_lst_Asesores_Seleccionados,g_lst_Juzgados_Seleccionados);


            }
            catch (Control_Errores)
            {
                bol_ValorDevuelto = false;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(PI_Citaciones_Controladora) + "/" + nameof(CargarDatos_Datos_Citaciones));
                bol_ValorDevuelto = false;
            }

            return bol_ValorDevuelto;
        }
        #endregion

        #region Crear Tab Nuevo
        private void Crear_Tab_Nuevo(long _lng_idAsesor_O_idJuzgado, string _str_Descripcion)
        {
            try
            {


                //CREAR COLUMNAS ########################################################################################
                DataGridViewCellStyle dgvcs_Estilo_AlineadoDerecho = new DataGridViewCellStyle();
                dgvcs_Estilo_AlineadoDerecho.Alignment = DataGridViewContentAlignment.MiddleRight;

                DataGridViewCellStyle dgvcs_Estilo_AlineadoCentro = new DataGridViewCellStyle();
                dgvcs_Estilo_AlineadoCentro.Alignment = DataGridViewContentAlignment.MiddleCenter;

                //CREAR DATAGRIDVIEW ######################################################################################
                Exferia_DataGridView dgv_Nuevo = new Exferia_DataGridView();

                dgv_Nuevo.AllowUserToAddRows = false;
                dgv_Nuevo.AllowUserToDeleteRows = false;
                dgv_Nuevo.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top |
                                                                           System.Windows.Forms.AnchorStyles.Bottom) |
                                                                           System.Windows.Forms.AnchorStyles.Left) |
                                                                           System.Windows.Forms.AnchorStyles.Right)));
                dgv_Nuevo.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single;
                dgv_Nuevo.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
                dgv_Nuevo.EnableHeadersVisualStyles = false;
                dgv_Nuevo.ColumnHeadersVisible = false;
                dgv_Nuevo.Location = new System.Drawing.Point(5, 5);
                dgv_Nuevo.MultiSelect = false;
                dgv_Nuevo.Name = "dgv_Informes_" + _lng_idAsesor_O_idJuzgado;
                dgv_Nuevo.ReadOnly = true;
                dgv_Nuevo.RowHeadersVisible = false;
                dgv_Nuevo.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
                dgv_Nuevo.Size = new Size(g_frm_PI_Citaciones.Exferia_TabControl_Citaciones.Width - 10, g_frm_PI_Citaciones.Exferia_TabControl_Citaciones.Height - 10);
                dgv_Nuevo.TabIndex = 40;
                dgv_Nuevo.Tag = _lng_idAsesor_O_idJuzgado;
                dgv_Nuevo.CellPainting += new DataGridViewCellPaintingEventHandler(dgv_Nuevo_CellPainting);
                dgv_Nuevo.ColumnWidthChanged += new DataGridViewColumnEventHandler(dgv_Nuevo_ColumnWidthChanged);
                dgv_Nuevo.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(dgv_Nuevo_CellFormatting);
                //#######################################################################################################

                dgv_Nuevo.AutoGenerateColumns = false;

                g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Columnas = g_obj_ABS_Listado_Citaciones_Informe.LISTADO_COLUMNAS().Values.ToList();

                //AÑADIR LAS COLUMNAS AL DATAGRIDVIEW ###################################################################
                foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Columnas)
                {
                    DataGridViewTextBoxColumn dgvc_Columna = new DataGridViewTextBoxColumn();
                    dgvc_Columna.DataPropertyName = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                    dgvc_Columna.Name = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                    dgvc_Columna.HeaderText = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_AMostrar;

                    //Formateo de Columnas .............................................................................
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                    {
                        dgvc_Columna.DefaultCellStyle.Format = "d";
                    }
                    else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.HORASIMPLE))
                    {
                        dgvc_Columna.DefaultCellStyle.Format = "t";
                    }
                    else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.HORACOMPLETA))
                    {
                        dgvc_Columna.DefaultCellStyle.Format = "T";
                    }
                    //..................................................................................................

                    //Poner Visible o no ...............................................................................
                    bool bol_Visible = true;
                    //si el listado de columnas a mostrar no esta vacio
                    if (g_lst_ColumnasAMostrar_Informe != null &&
                        g_lst_ColumnasAMostrar_Informe.Count > 0)
                    {
                        //compruebo cual no esta en el listado y la oculto
                        if (!g_lst_ColumnasAMostrar_Informe.Contains(dgvc_Columna.Name))
                        {
                            bol_Visible = false;
                        }
                    }
                    //sino significa que es la primera vez que entra asi que validamos todo de forma normal
                    else
                    {
                        if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Oculto)
                        {
                            bol_Visible = false;
                        }
                        else if (g_frm_PI_Citaciones.g_mdl_INTERNO_ConfiguracionPantalla_Modelo_INFORME != null &&
                                g_frm_PI_Citaciones.g_mdl_INTERNO_ConfiguracionPantalla_Modelo_INFORME.LISTADO_COLUMNASAMOSTRAR != null &&
                                g_frm_PI_Citaciones.g_mdl_INTERNO_ConfiguracionPantalla_Modelo_INFORME.LISTADO_COLUMNASAMOSTRAR.Count > 0)
                        {
                            if (!g_frm_PI_Citaciones.g_mdl_INTERNO_ConfiguracionPantalla_Modelo_INFORME.LISTADO_COLUMNASAMOSTRAR.Contains(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna))
                            {
                                bol_Visible = false;
                            }
                        }
                        else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Mostrado_PorDefecto == false)
                        {
                            bol_Visible = false;
                        }

                        if (!g_lst_ColumnasAMostrar_Informe_PrimeraCarga.Exists(x => x.Equals(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna)) &&
                            bol_Visible)
                        {
                            g_lst_ColumnasAMostrar_Informe_PrimeraCarga.Add(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna);
                        }
                    }
                    dgvc_Columna.Visible = bol_Visible;

                    //Poner Ancho Columna ................................................................................
                    if (g_frm_PI_Citaciones.g_mdl_INTERNO_ConfiguracionPantalla_Modelo_INFORME != null &&
                        g_frm_PI_Citaciones.g_mdl_INTERNO_ConfiguracionPantalla_Modelo_INFORME.LISTADO_COLUMNAS_ANCHO != null &&
                        g_frm_PI_Citaciones.g_mdl_INTERNO_ConfiguracionPantalla_Modelo_INFORME.LISTADO_COLUMNAS_ANCHO.Count > 0 &&
                        g_frm_PI_Citaciones.g_mdl_INTERNO_ConfiguracionPantalla_Modelo_INFORME.LISTADO_COLUMNAS_ANCHO.ContainsKey(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna))
                    {
                        dgvc_Columna.Width = g_frm_PI_Citaciones.g_mdl_INTERNO_ConfiguracionPantalla_Modelo_INFORME.LISTADO_COLUMNAS_ANCHO[mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna];
                    }
                    else
                    {
                        if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Ancho > 0)
                        {
                            dgvc_Columna.Width = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Ancho;
                        }
                    }
                    //................................................................................................................

                    dgvc_Columna.ReadOnly = true;

                    //Poner alineado segun tipo de datos ...............................................................
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DECIMAL) ||
                        mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG) ||
                        mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG_TEXT) ||
                        mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.INT))
                    {
                        dgvc_Columna.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
                    }
                    else
                    {
                        dgvc_Columna.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
                    }
                    //..................................................................................................

                    dgv_Nuevo.Columns.Add(dgvc_Columna);
                }

                //#####################################################################################################

                //AÑADIR TAB ############################################################################################
                TabPage tbp_Aux = new TabPage();
                tbp_Aux.Location = new System.Drawing.Point(4, 22);
                tbp_Aux.Name = "TabPage_" + _lng_idAsesor_O_idJuzgado;
                tbp_Aux.BackColor = Color.White;
                tbp_Aux.Size = new Size(g_frm_PI_Citaciones.Exferia_TabControl_Citaciones.Width, g_frm_PI_Citaciones.Exferia_TabControl_Citaciones.Height);
                tbp_Aux.TabIndex = 0;
                tbp_Aux.Text = _str_Descripcion;
                tbp_Aux.UseVisualStyleBackColor = true;
                tbp_Aux.Controls.Add(dgv_Nuevo);
                tbp_Aux.Tag = "id_" + _lng_idAsesor_O_idJuzgado;

                //Añadir el TabPage al TabControl
                g_frm_PI_Citaciones.Exferia_TabControl_Citaciones.TabPages.Add(tbp_Aux);

                g_lst_DataGridViews_Generados.Add("dgv_Informes_" + _lng_idAsesor_O_idJuzgado);

                //#######################################################################################################

                //Asigno el dataGridView a la variable general
                g_obj_DataGridView_Selecionado = dgv_Nuevo;

                Repintar.Empezar(tbp_Aux);
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(PI_Citaciones_Controladora) + "/" + nameof(Crear_Tab_Nuevo));
            }
        }

        void dgv_Nuevo_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
        {
            try
            {
                if (e.RowIndex > -1)
                {
                    Exferia_DataGridView dgv_Nuevo = (Exferia_DataGridView)sender;

                    //Tipo fecha
                    if (int.Parse(dgv_Nuevo[nameof(INTERNO_Informe_Citaciones_Modelo.Tipo), e.RowIndex].Value.ToString()) == 0)
                    {
                        if (e.ColumnIndex == 2)
                        {
                            DateTime dtt_Fecha = DateTime.ParseExact(dgv_Nuevo[nameof(INTERNO_Informe_Citaciones_Modelo.Citacion_Fecha), e.RowIndex].Value.ToString().Substring(0,10), "dd/MM/yyyy", CultureInfo.InvariantCulture);
                            Rectangle rtg = dgv_Nuevo.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true);

                            rtg.Width = dgv_Nuevo.Columns.GetColumnsWidth(DataGridViewElementStates.Visible);
                            e.Graphics.FillRectangle(new SolidBrush(Colores.G_COLOR_LISTADO_TOTALES_FONDO), rtg);
                            StringFormat strf = new StringFormat();
                            strf.Alignment = StringAlignment.Center;
                            e.Graphics.DrawString(Funciones.Fecha_Delvolver_FechaLarga(dtt_Fecha.Date),
                                dgv_Nuevo.ColumnHeadersDefaultCellStyle.Font,
                                new SolidBrush(Colores.G_COLOR_LISTADO_TOTALES_LETRA),
                                rtg,
                                strf);
                            e.Handled = true;
                        }
                        else
                        {
                            e.Handled = true;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(PI_Citaciones_Controladora) + "/" + nameof(dgv_Nuevo_CellPainting));
            }
        }
        private void dgv_Nuevo_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            Exferia_DataGridView dgv_Nuevo = (Exferia_DataGridView)sender;

            //Tipo Cabecera
            if (int.Parse(dgv_Nuevo[nameof(INTERNO_Informe_Citaciones_Modelo.Tipo), e.RowIndex].Value.ToString()) == 1)
            {
                //Color Fondo
                dgv_Nuevo.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = dgv_Nuevo.ColumnHeadersDefaultCellStyle.BackColor;
                dgv_Nuevo.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.SelectionBackColor = dgv_Nuevo.ColumnHeadersDefaultCellStyle.BackColor;

                //Color Letra
                dgv_Nuevo.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.ForeColor = dgv_Nuevo.ColumnHeadersDefaultCellStyle.ForeColor;
                dgv_Nuevo.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.SelectionForeColor = dgv_Nuevo.ColumnHeadersDefaultCellStyle.ForeColor;
            }
        }
        private void dgv_Nuevo_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
        {
            try
            {
                Exferia_DataGridView dgv_Nuevo = (Exferia_DataGridView)sender;
                dgv_Nuevo.Invalidate();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(PI_Citaciones_Controladora) + "/" + nameof(dgv_Nuevo_ColumnWidthChanged));
            }
        }
        #endregion
        
        #region Exportar a Excel

        #region Por Hojas
        public void Exportar_Excel_PorHojas()
        {
            try
            {
                List<INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo> lst_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo = new List<INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo>();

                long lng_idAsesor_o_Juzgado = -1;
                foreach (TabPage tbp_Hoja in g_frm_PI_Citaciones.Exferia_TabControl_Citaciones.TabPages)
                {
                    lng_idAsesor_o_Juzgado = long.Parse(tbp_Hoja.Tag.ToString().Replace("id_", ""));

                    INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo mdl_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo = new INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo();

                    //Hoja
                    mdl_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo.Hoja_Descripcion = tbp_Hoja.Text;

                    //Buscar el DataGridView del juzgado o Asesor en cuestion
                    Exferia_DataGridView ex_dgv_Juzgado_O_Asesor = (Exferia_DataGridView)g_frm_PI_Citaciones.Exferia_TabControl_Citaciones.Controls.Find("dgv_Informes_" + lng_idAsesor_o_Juzgado, true).FirstOrDefault();
                    if (ex_dgv_Juzgado_O_Asesor != null)
                    {
                        //Filas .......................................................................................................................................................
                        List<INTERNO_ExportarExcel_Filas_Modelo> lst_INTERNO_ExportarExcel_Filas_Modelo = new List<INTERNO_ExportarExcel_Filas_Modelo>();
                        if (ex_dgv_Juzgado_O_Asesor.Rows!=null  && ex_dgv_Juzgado_O_Asesor.Rows.Count > 0)
                        {
                            int int_ColumnasVisibles = g_lst_ColumnasAMostrar_Informe.Count;

                            foreach (DataGridViewRow dgvr_Fila in ex_dgv_Juzgado_O_Asesor.Rows)
                            {
                                //Tipo Fecha
                                if (dgvr_Fila.Cells[0].Value.ToString()=="0")
                                {
                                    List<INTERNO_ExportarExcel_Celdas_Modelo> lst_INTERNO_ExportarExcel_Celdas_Modelo = new List<INTERNO_ExportarExcel_Celdas_Modelo>();

                                    DateTime dtt_Fecha = DateTime.ParseExact(dgvr_Fila.Cells[nameof(INTERNO_Informe_Citaciones_Modelo.Citacion_Fecha)].Value.ToString().Substring(0, 10), "dd/MM/yyyy", CultureInfo.InvariantCulture);
                                    string str_Fecha = Funciones.Fecha_Delvolver_FechaLarga(dtt_Fecha);

                                    lst_INTERNO_ExportarExcel_Celdas_Modelo.Add(new INTERNO_ExportarExcel_Celdas_Modelo(str_Fecha, G_ENUM_TIPOSDATOS.TEXT, Colores.G_COLOR_LISTADO_TOTALES_FONDO, Colores.G_COLOR_LISTADO_TOTALES_LETRA));

                                    INTERNO_ExportarExcel_Filas_Modelo mdl_INTERNO_ExportarExcel_Filas_Modelo = new INTERNO_ExportarExcel_Filas_Modelo();
                                    mdl_INTERNO_ExportarExcel_Filas_Modelo.Celdas = lst_INTERNO_ExportarExcel_Celdas_Modelo;
                                    mdl_INTERNO_ExportarExcel_Filas_Modelo.Cantidad_Columnas_A_Unir = int_ColumnasVisibles;

                                    //Añadir la Fila
                                    lst_INTERNO_ExportarExcel_Filas_Modelo.Add(mdl_INTERNO_ExportarExcel_Filas_Modelo);
                                }
                                //Tipo Cabecera
                                else if (dgvr_Fila.Cells[0].Value.ToString() == "1")
                                {
                                    List<INTERNO_ExportarExcel_Celdas_Modelo> lst_INTERNO_ExportarExcel_Celdas_Modelo = new List<INTERNO_ExportarExcel_Celdas_Modelo>();
                                    foreach (DataGridViewCell dgvc_Celda in dgvr_Fila.Cells)
                                    {
                                        if (dgvc_Celda.Visible)
                                        {
                                            string str_Valor = (string)dgvc_Celda.Value;

                                            lst_INTERNO_ExportarExcel_Celdas_Modelo.Add(new INTERNO_ExportarExcel_Celdas_Modelo(str_Valor, G_ENUM_TIPOSDATOS.TEXT, Colores.G_COLOR_PRINCIPAL_BASE, Colores.G_COLOR_LISTADO_CABECERA_LETRA));
                                        }
                                    }

                                    INTERNO_ExportarExcel_Filas_Modelo mdl_INTERNO_ExportarExcel_Filas_Modelo = new INTERNO_ExportarExcel_Filas_Modelo();
                                    mdl_INTERNO_ExportarExcel_Filas_Modelo.Celdas = lst_INTERNO_ExportarExcel_Celdas_Modelo;
                                    //Añadir la Fila
                                    lst_INTERNO_ExportarExcel_Filas_Modelo.Add(mdl_INTERNO_ExportarExcel_Filas_Modelo);
                                }
                                //Tipo Fila
                                else
                                {
                                    //Celdas 
                                    List<INTERNO_ExportarExcel_Celdas_Modelo> lst_INTERNO_ExportarExcel_Celdas_Modelo = new List<INTERNO_ExportarExcel_Celdas_Modelo>();
                                    foreach (DataGridViewCell dgvc_Celda in dgvr_Fila.Cells)
                                    {
                                        if (dgvc_Celda.Visible)
                                        {
                                            string str_Valor = (string)dgvc_Celda.Value;

                                            lst_INTERNO_ExportarExcel_Celdas_Modelo.Add(new INTERNO_ExportarExcel_Celdas_Modelo(str_Valor, G_ENUM_TIPOSDATOS.TEXT, Color.White, Color.Black));
                                        }
                                    }

                                    INTERNO_ExportarExcel_Filas_Modelo mdl_INTERNO_ExportarExcel_Filas_Modelo = new INTERNO_ExportarExcel_Filas_Modelo();
                                    mdl_INTERNO_ExportarExcel_Filas_Modelo.Celdas = lst_INTERNO_ExportarExcel_Celdas_Modelo;
                                    //Añadir la Fila
                                    lst_INTERNO_ExportarExcel_Filas_Modelo.Add(mdl_INTERNO_ExportarExcel_Filas_Modelo);
                                }

                               
                            }
                        }

                        mdl_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo.Filas = lst_INTERNO_ExportarExcel_Filas_Modelo;

                        //Añadir al Listado la Hoja
                        lst_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo.Add(mdl_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo);
                    }
                }
                

                //Si tiene algo lo genero en Excel sino no
                if (lst_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo != null && lst_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo.Count > 0)
                {
                    //Ver si tiene una Ruta por Defecto ................................................................................................................
                    string str_RutaCompleta = "";

                    string str_NombreFichero = Funciones.Quitar_CaracteresEspeciales(g_frm_PI_Citaciones.P_Base_TituloPantalla) + "_" + DateTime.Now.ToString("yyyyMMdd");
                    string str_Ruta = @"C:";

                    //Ver si tiene una Ruta por Defecto ................................................................................................................
                    List<INTERNO_CodigoDescripcion_Modelo> lst_INTERNO_CodigoDescripcion_Modelo = new List<INTERNO_CodigoDescripcion_Modelo>();
                    lst_INTERNO_CodigoDescripcion_Modelo.Add(new INTERNO_CodigoDescripcion_Modelo(Variables.G_MDL_PARAMETRO_RUTA_CODIGO_EMPRESA.Codigo, g_frm_PI_Citaciones.P_Base_ValoresGenerales.str_Empresa_Codigo));
                    lst_INTERNO_CodigoDescripcion_Modelo.Add(new INTERNO_CodigoDescripcion_Modelo(Variables.G_MDL_PARAMETRO_RUTA_FECHA.Codigo, g_frm_PI_Citaciones.P_Base_FechaTrabajo.ToString("yyyyMMdd")));
                    lst_INTERNO_CodigoDescripcion_Modelo.Add(new INTERNO_CodigoDescripcion_Modelo(Variables.G_MDL_PARAMETRO_RUTA_HORA.Codigo, g_frm_PI_Citaciones.P_Base_FechaTrabajo.ToString("HHmmss")));
                    lst_INTERNO_CodigoDescripcion_Modelo.Add(new INTERNO_CodigoDescripcion_Modelo(Variables.G_MDL_PARAMETRO_RUTA_EJERCICIO.Codigo, g_frm_PI_Citaciones.P_Base_ValoresGenerales.EjercicioActivo.anioControl));

                    str_RutaCompleta = Funciones.Transformar_Ruta(str_Ruta, str_NombreFichero, ".xlsx", lst_INTERNO_CodigoDescripcion_Modelo);
                    //...................................................................................................................................................

                    Funciones_FicherosExcel.Generar_DocumentoListado_Excel_SoloLineas(lst_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo, str_RutaCompleta);
                }
                else
                {
                    Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_EXPORTAREXCEL());
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(PI_Citaciones_Controladora) + "/" + nameof(Exportar_Excel_PorHojas));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_EXPORTAREXCEL());
            }
        }

        public void Exportar_Excel_HojaUnica()
        {
            try
            {
                List<INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo> lst_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo = new List<INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo>();
                INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo mdl_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo = new INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo();

                //Hoja
                mdl_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo.Hoja_Descripcion = "Citaciones";
                List<INTERNO_ExportarExcel_Filas_Modelo> lst_INTERNO_ExportarExcel_Filas_Modelo = new List<INTERNO_ExportarExcel_Filas_Modelo>();
                long lng_idAsesor_o_Juzgado = -1;
                int int_ColumnasVisibles = g_lst_ColumnasAMostrar_Informe.Count;

                foreach (TabPage tbp_Hoja in g_frm_PI_Citaciones.Exferia_TabControl_Citaciones.TabPages)
                {
                    #region Titulo
                    List<INTERNO_ExportarExcel_Celdas_Modelo> lst_INTERNO_ExportarExcel_Celdas_Modelo_TITULO = new List<INTERNO_ExportarExcel_Celdas_Modelo>();

                    lst_INTERNO_ExportarExcel_Celdas_Modelo_TITULO.Add(new INTERNO_ExportarExcel_Celdas_Modelo(tbp_Hoja.Text, G_ENUM_TIPOSDATOS.TEXT, Color.Black, Color.White));

                    INTERNO_ExportarExcel_Filas_Modelo mdl_INTERNO_ExportarExcel_Filas_Modelo_TITULO = new INTERNO_ExportarExcel_Filas_Modelo();
                    mdl_INTERNO_ExportarExcel_Filas_Modelo_TITULO.Celdas = lst_INTERNO_ExportarExcel_Celdas_Modelo_TITULO;
                    mdl_INTERNO_ExportarExcel_Filas_Modelo_TITULO.Cantidad_Columnas_A_Unir = int_ColumnasVisibles;

                    //Añadir la Fila
                    lst_INTERNO_ExportarExcel_Filas_Modelo.Add(mdl_INTERNO_ExportarExcel_Filas_Modelo_TITULO);
                    #endregion

                    lng_idAsesor_o_Juzgado = long.Parse(tbp_Hoja.Tag.ToString().Replace("id_", ""));

                    //Buscar el DataGridView del juzgado o Asesor en cuestion
                    Exferia_DataGridView ex_dgv_Juzgado_O_Asesor = (Exferia_DataGridView)g_frm_PI_Citaciones.Exferia_TabControl_Citaciones.Controls.Find("dgv_Informes_" + lng_idAsesor_o_Juzgado, true).FirstOrDefault();
                    if (ex_dgv_Juzgado_O_Asesor != null)
                    {
                        //Filas .......................................................................................................................................................
                        if (ex_dgv_Juzgado_O_Asesor.Rows != null && ex_dgv_Juzgado_O_Asesor.Rows.Count > 0)
                        {
                           

                            foreach (DataGridViewRow dgvr_Fila in ex_dgv_Juzgado_O_Asesor.Rows)
                            {
                                //Tipo Fecha
                                if (dgvr_Fila.Cells[0].Value.ToString() == "0")
                                {
                                    List<INTERNO_ExportarExcel_Celdas_Modelo> lst_INTERNO_ExportarExcel_Celdas_Modelo = new List<INTERNO_ExportarExcel_Celdas_Modelo>();

                                    DateTime dtt_Fecha = DateTime.ParseExact(dgvr_Fila.Cells[nameof(INTERNO_Informe_Citaciones_Modelo.Citacion_Fecha)].Value.ToString().Substring(0, 10), "dd/MM/yyyy", CultureInfo.InvariantCulture);
                                    string str_Fecha = Funciones.Fecha_Delvolver_FechaLarga(dtt_Fecha);

                                    lst_INTERNO_ExportarExcel_Celdas_Modelo.Add(new INTERNO_ExportarExcel_Celdas_Modelo(str_Fecha, G_ENUM_TIPOSDATOS.TEXT, Colores.G_COLOR_LISTADO_TOTALES_FONDO, Colores.G_COLOR_LISTADO_TOTALES_LETRA));

                                    INTERNO_ExportarExcel_Filas_Modelo mdl_INTERNO_ExportarExcel_Filas_Modelo = new INTERNO_ExportarExcel_Filas_Modelo();
                                    mdl_INTERNO_ExportarExcel_Filas_Modelo.Celdas = lst_INTERNO_ExportarExcel_Celdas_Modelo;
                                    mdl_INTERNO_ExportarExcel_Filas_Modelo.Cantidad_Columnas_A_Unir = int_ColumnasVisibles;

                                    //Añadir la Fila
                                    lst_INTERNO_ExportarExcel_Filas_Modelo.Add(mdl_INTERNO_ExportarExcel_Filas_Modelo);
                                }
                                //Tipo Cabecera
                                else if (dgvr_Fila.Cells[0].Value.ToString() == "1")
                                {
                                    List<INTERNO_ExportarExcel_Celdas_Modelo> lst_INTERNO_ExportarExcel_Celdas_Modelo = new List<INTERNO_ExportarExcel_Celdas_Modelo>();
                                    foreach (DataGridViewCell dgvc_Celda in dgvr_Fila.Cells)
                                    {
                                        if (dgvc_Celda.Visible)
                                        {
                                            string str_Valor = (string)dgvc_Celda.Value;

                                            lst_INTERNO_ExportarExcel_Celdas_Modelo.Add(new INTERNO_ExportarExcel_Celdas_Modelo(str_Valor, G_ENUM_TIPOSDATOS.TEXT, Colores.G_COLOR_PRINCIPAL_BASE, Colores.G_COLOR_LISTADO_CABECERA_LETRA));
                                        }
                                    }

                                    INTERNO_ExportarExcel_Filas_Modelo mdl_INTERNO_ExportarExcel_Filas_Modelo = new INTERNO_ExportarExcel_Filas_Modelo();
                                    mdl_INTERNO_ExportarExcel_Filas_Modelo.Celdas = lst_INTERNO_ExportarExcel_Celdas_Modelo;
                                    //Añadir la Fila
                                    lst_INTERNO_ExportarExcel_Filas_Modelo.Add(mdl_INTERNO_ExportarExcel_Filas_Modelo);
                                }
                                //Tipo Fila
                                else
                                {
                                    //Celdas 
                                    List<INTERNO_ExportarExcel_Celdas_Modelo> lst_INTERNO_ExportarExcel_Celdas_Modelo = new List<INTERNO_ExportarExcel_Celdas_Modelo>();
                                    foreach (DataGridViewCell dgvc_Celda in dgvr_Fila.Cells)
                                    {
                                        if (dgvc_Celda.Visible)
                                        {
                                            string str_Valor = (string)dgvc_Celda.Value;

                                            lst_INTERNO_ExportarExcel_Celdas_Modelo.Add(new INTERNO_ExportarExcel_Celdas_Modelo(str_Valor, G_ENUM_TIPOSDATOS.TEXT, Color.White, Color.Black));
                                        }
                                    }

                                    INTERNO_ExportarExcel_Filas_Modelo mdl_INTERNO_ExportarExcel_Filas_Modelo = new INTERNO_ExportarExcel_Filas_Modelo();
                                    mdl_INTERNO_ExportarExcel_Filas_Modelo.Celdas = lst_INTERNO_ExportarExcel_Celdas_Modelo;
                                    //Añadir la Fila
                                    lst_INTERNO_ExportarExcel_Filas_Modelo.Add(mdl_INTERNO_ExportarExcel_Filas_Modelo);
                                }
                            }

                            #region Espacio en Blanco
                            List<INTERNO_ExportarExcel_Celdas_Modelo> lst_INTERNO_ExportarExcel_Celdas_Modelo_ENBLANCO = new List<INTERNO_ExportarExcel_Celdas_Modelo>();

                            lst_INTERNO_ExportarExcel_Celdas_Modelo_ENBLANCO.Add(new INTERNO_ExportarExcel_Celdas_Modelo("", G_ENUM_TIPOSDATOS.TEXT, Color.White, Color.White));

                            INTERNO_ExportarExcel_Filas_Modelo mdl_INTERNO_ExportarExcel_Filas_Modelo_ENBLANCO = new INTERNO_ExportarExcel_Filas_Modelo();
                            mdl_INTERNO_ExportarExcel_Filas_Modelo_ENBLANCO.Celdas = lst_INTERNO_ExportarExcel_Celdas_Modelo_ENBLANCO;
                            mdl_INTERNO_ExportarExcel_Filas_Modelo_ENBLANCO.Cantidad_Columnas_A_Unir = int_ColumnasVisibles;

                            //Añadir la Fila
                            lst_INTERNO_ExportarExcel_Filas_Modelo.Add(mdl_INTERNO_ExportarExcel_Filas_Modelo_ENBLANCO);
                            #endregion
                        }

                        //Añadir a la filas
                        mdl_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo.Filas = lst_INTERNO_ExportarExcel_Filas_Modelo;
                    }
                }

                //Añadir al Listado la Hoja
                lst_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo.Add(mdl_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo);

                //Si tiene algo lo genero en Excel sino no
                if (lst_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo != null && lst_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo.Count > 0)
                {
                    //Ver si tiene una Ruta por Defecto ................................................................................................................
                    string str_RutaCompleta = "";

                    string str_NombreFichero = Funciones.Quitar_CaracteresEspeciales(g_frm_PI_Citaciones.P_Base_TituloPantalla) + "_" + DateTime.Now.ToString("yyyyMMdd");
                    string str_Ruta = @"C:";

                    //Ver si tiene una Ruta por Defecto ................................................................................................................
                    List<INTERNO_CodigoDescripcion_Modelo> lst_INTERNO_CodigoDescripcion_Modelo = new List<INTERNO_CodigoDescripcion_Modelo>();
                    lst_INTERNO_CodigoDescripcion_Modelo.Add(new INTERNO_CodigoDescripcion_Modelo(Variables.G_MDL_PARAMETRO_RUTA_CODIGO_EMPRESA.Codigo, g_frm_PI_Citaciones.P_Base_ValoresGenerales.str_Empresa_Codigo));
                    lst_INTERNO_CodigoDescripcion_Modelo.Add(new INTERNO_CodigoDescripcion_Modelo(Variables.G_MDL_PARAMETRO_RUTA_FECHA.Codigo, g_frm_PI_Citaciones.P_Base_FechaTrabajo.ToString("yyyyMMdd")));
                    lst_INTERNO_CodigoDescripcion_Modelo.Add(new INTERNO_CodigoDescripcion_Modelo(Variables.G_MDL_PARAMETRO_RUTA_HORA.Codigo, g_frm_PI_Citaciones.P_Base_FechaTrabajo.ToString("HHmmss")));
                    lst_INTERNO_CodigoDescripcion_Modelo.Add(new INTERNO_CodigoDescripcion_Modelo(Variables.G_MDL_PARAMETRO_RUTA_EJERCICIO.Codigo, g_frm_PI_Citaciones.P_Base_ValoresGenerales.EjercicioActivo.anioControl));

                    str_RutaCompleta = Funciones.Transformar_Ruta(str_Ruta, str_NombreFichero, ".xlsx", lst_INTERNO_CodigoDescripcion_Modelo);
                    //...................................................................................................................................................

                    Funciones_FicherosExcel.Generar_DocumentoListado_Excel_SoloLineas(lst_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo, str_RutaCompleta);
                }
                else
                {
                    Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_EXPORTAREXCEL());
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(PI_Citaciones_Controladora) + "/" + nameof(Exportar_Excel_HojaUnica));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_EXPORTAREXCEL());
            }
        }

        public void Exportar_Excel_PorHojas_Fechas()
        {
            try
            {
                List<INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo> lst_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo = new List<INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo>();

                //Listado de Dias
                List<DateTime> lst_Dias=g_lst_INTERNO_Informe_Citaciones_Modelo.Select(m => m.Citacion_Fecha.Date).Distinct().ToList();

                int int_ColumnasVisibles = g_lst_ColumnasAMostrar_Informe.Count;

                if (lst_Dias!=null && lst_Dias.Count>0)
                {
                    foreach (DateTime dtt_Dia in lst_Dias.OrderBy(m=>m))
                    {
                        INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo mdl_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo_Dia = new INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo();
                        //Hoja
                        mdl_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo_Dia.Hoja_Descripcion = Funciones.Fecha_Delvolver_DiaSemana_Texto(dtt_Dia) + "_" + dtt_Dia.ToString("dd_MM_yyyy");

                        long lng_idAsesor_o_Juzgado = -1;

                        List<INTERNO_ExportarExcel_Filas_Modelo> lst_INTERNO_ExportarExcel_Filas_Modelo = new List<INTERNO_ExportarExcel_Filas_Modelo>();
                        
                        #region Fecha
                        List<INTERNO_ExportarExcel_Celdas_Modelo> lst_INTERNO_ExportarExcel_Celdas_Modelo_FECHA = new List<INTERNO_ExportarExcel_Celdas_Modelo>();

                        lst_INTERNO_ExportarExcel_Celdas_Modelo_FECHA.Add(new INTERNO_ExportarExcel_Celdas_Modelo(Funciones.Fecha_Delvolver_FechaLarga(dtt_Dia), G_ENUM_TIPOSDATOS.TEXT, Colores.G_COLOR_LISTADO_TOTALES_FONDO, Colores.G_COLOR_LISTADO_TOTALES_LETRA));

                        INTERNO_ExportarExcel_Filas_Modelo mdl_INTERNO_ExportarExcel_Filas_Modelo_FECHA = new INTERNO_ExportarExcel_Filas_Modelo();
                        mdl_INTERNO_ExportarExcel_Filas_Modelo_FECHA.Celdas = lst_INTERNO_ExportarExcel_Celdas_Modelo_FECHA;
                        mdl_INTERNO_ExportarExcel_Filas_Modelo_FECHA.Cantidad_Columnas_A_Unir = int_ColumnasVisibles;

                        //Añadir la Fila
                        lst_INTERNO_ExportarExcel_Filas_Modelo.Add(mdl_INTERNO_ExportarExcel_Filas_Modelo_FECHA);
                        #endregion

                        foreach (TabPage tbp_Hoja in g_frm_PI_Citaciones.Exferia_TabControl_Citaciones.TabPages)
                        {
                            List<INTERNO_ExportarExcel_Filas_Modelo> lst_INTERNO_ExportarExcel_Filas_Modelo_VALORES = new List<INTERNO_ExportarExcel_Filas_Modelo>();


                            lng_idAsesor_o_Juzgado = long.Parse(tbp_Hoja.Tag.ToString().Replace("id_", ""));

                            #region Titulo
                            List<INTERNO_ExportarExcel_Celdas_Modelo> lst_INTERNO_ExportarExcel_Celdas_Modelo_TITULO = new List<INTERNO_ExportarExcel_Celdas_Modelo>();

                            lst_INTERNO_ExportarExcel_Celdas_Modelo_TITULO.Add(new INTERNO_ExportarExcel_Celdas_Modelo(tbp_Hoja.Text, G_ENUM_TIPOSDATOS.TEXT, Color.Black, Color.White));

                            INTERNO_ExportarExcel_Filas_Modelo mdl_INTERNO_ExportarExcel_Filas_Modelo_TITULO = new INTERNO_ExportarExcel_Filas_Modelo();
                            mdl_INTERNO_ExportarExcel_Filas_Modelo_TITULO.Celdas = lst_INTERNO_ExportarExcel_Celdas_Modelo_TITULO;
                            mdl_INTERNO_ExportarExcel_Filas_Modelo_TITULO.Cantidad_Columnas_A_Unir = int_ColumnasVisibles;

                            //Añadir la Fila
                            lst_INTERNO_ExportarExcel_Filas_Modelo_VALORES.Add(mdl_INTERNO_ExportarExcel_Filas_Modelo_TITULO);
                            #endregion

                            //Buscar el DataGridView del juzgado o Asesor en cuestion
                            Exferia_DataGridView ex_dgv_Juzgado_O_Asesor = (Exferia_DataGridView)g_frm_PI_Citaciones.Exferia_TabControl_Citaciones.Controls.Find("dgv_Informes_" + lng_idAsesor_o_Juzgado, true).FirstOrDefault();
                            if (ex_dgv_Juzgado_O_Asesor != null)
                            {
                                //Filas .......................................................................................................................................................
                                if (ex_dgv_Juzgado_O_Asesor.Rows != null && ex_dgv_Juzgado_O_Asesor.Rows.Count > 0)
                                {
                                    bool bol_Entrar = false;
                                    foreach (DataGridViewRow dgvr_Fila in ex_dgv_Juzgado_O_Asesor.Rows)
                                    {
                                        //Filtrar Fecha
                                        if (dgvr_Fila.Cells[0].Value.ToString() == "0")
                                        {
                                            if (DateTime.ParseExact(dgvr_Fila.Cells[nameof(INTERNO_Informe_Citaciones_Modelo.Citacion_Fecha)].Value.ToString().Substring(0, 10), "dd/MM/yyyy", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy") == dtt_Dia.ToString("dd/MM/yyyy"))
                                            {
                                                if (bol_Entrar == false)
                                                {
                                                    bol_Entrar = true;
                                                }
                                            }
                                            else
                                            {
                                                if (bol_Entrar)
                                                {
                                                    break;
                                                }
                                            }
                                        }

                                        //Filtrar Fecha
                                        if (dgvr_Fila.Cells[0].Value.ToString() != "0" && bol_Entrar)
                                        {
                                            //Tipo Cabecera
                                            if (dgvr_Fila.Cells[0].Value.ToString() == "1")
                                            {
                                                List<INTERNO_ExportarExcel_Celdas_Modelo> lst_INTERNO_ExportarExcel_Celdas_Modelo = new List<INTERNO_ExportarExcel_Celdas_Modelo>();
                                                foreach (DataGridViewCell dgvc_Celda in dgvr_Fila.Cells)
                                                {
                                                    if (dgvc_Celda.Visible)
                                                    {
                                                        string str_Valor = (string)dgvc_Celda.Value;

                                                        lst_INTERNO_ExportarExcel_Celdas_Modelo.Add(new INTERNO_ExportarExcel_Celdas_Modelo(str_Valor, G_ENUM_TIPOSDATOS.TEXT, Colores.G_COLOR_PRINCIPAL_BASE, Colores.G_COLOR_LISTADO_CABECERA_LETRA));
                                                    }
                                                }

                                                INTERNO_ExportarExcel_Filas_Modelo mdl_INTERNO_ExportarExcel_Filas_Modelo = new INTERNO_ExportarExcel_Filas_Modelo();
                                                mdl_INTERNO_ExportarExcel_Filas_Modelo.Celdas = lst_INTERNO_ExportarExcel_Celdas_Modelo;
                                                //Añadir la Fila
                                                lst_INTERNO_ExportarExcel_Filas_Modelo_VALORES.Add(mdl_INTERNO_ExportarExcel_Filas_Modelo);
                                            }
                                            //Tipo Fila
                                            else
                                            {
                                                //Celdas 
                                                List<INTERNO_ExportarExcel_Celdas_Modelo> lst_INTERNO_ExportarExcel_Celdas_Modelo = new List<INTERNO_ExportarExcel_Celdas_Modelo>();
                                                foreach (DataGridViewCell dgvc_Celda in dgvr_Fila.Cells)
                                                {
                                                    if (dgvc_Celda.Visible)
                                                    {
                                                        string str_Valor = (string)dgvc_Celda.Value;

                                                        lst_INTERNO_ExportarExcel_Celdas_Modelo.Add(new INTERNO_ExportarExcel_Celdas_Modelo(str_Valor, G_ENUM_TIPOSDATOS.TEXT, Color.White, Color.Black));
                                                    }
                                                }

                                                INTERNO_ExportarExcel_Filas_Modelo mdl_INTERNO_ExportarExcel_Filas_Modelo = new INTERNO_ExportarExcel_Filas_Modelo();
                                                mdl_INTERNO_ExportarExcel_Filas_Modelo.Celdas = lst_INTERNO_ExportarExcel_Celdas_Modelo;
                                                //Añadir la Fila
                                                lst_INTERNO_ExportarExcel_Filas_Modelo_VALORES.Add(mdl_INTERNO_ExportarExcel_Filas_Modelo);
                                            }
                                        }
                                    }
                                }
                            }

                            if (lst_INTERNO_ExportarExcel_Filas_Modelo_VALORES!=null && lst_INTERNO_ExportarExcel_Filas_Modelo_VALORES.Count>0)
                            {
                                lst_INTERNO_ExportarExcel_Filas_Modelo.AddRange(lst_INTERNO_ExportarExcel_Filas_Modelo_VALORES);
                            }
                        }

                        mdl_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo_Dia.Filas=lst_INTERNO_ExportarExcel_Filas_Modelo;

                        //Añadir al Listado la Hoja
                        lst_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo.Add(mdl_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo_Dia);
                    }
                }


                //Si tiene algo lo genero en Excel sino no
                if (lst_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo != null && lst_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo.Count > 0)
                {
                    //Ver si tiene una Ruta por Defecto ................................................................................................................
                    string str_RutaCompleta = "";

                    string str_NombreFichero = Funciones.Quitar_CaracteresEspeciales(g_frm_PI_Citaciones.P_Base_TituloPantalla) + "_" + DateTime.Now.ToString("yyyyMMdd");
                    string str_Ruta = @"C:";

                    //Ver si tiene una Ruta por Defecto ................................................................................................................
                    List<INTERNO_CodigoDescripcion_Modelo> lst_INTERNO_CodigoDescripcion_Modelo = new List<INTERNO_CodigoDescripcion_Modelo>();
                    lst_INTERNO_CodigoDescripcion_Modelo.Add(new INTERNO_CodigoDescripcion_Modelo(Variables.G_MDL_PARAMETRO_RUTA_CODIGO_EMPRESA.Codigo, g_frm_PI_Citaciones.P_Base_ValoresGenerales.str_Empresa_Codigo));
                    lst_INTERNO_CodigoDescripcion_Modelo.Add(new INTERNO_CodigoDescripcion_Modelo(Variables.G_MDL_PARAMETRO_RUTA_FECHA.Codigo, g_frm_PI_Citaciones.P_Base_FechaTrabajo.ToString("yyyyMMdd")));
                    lst_INTERNO_CodigoDescripcion_Modelo.Add(new INTERNO_CodigoDescripcion_Modelo(Variables.G_MDL_PARAMETRO_RUTA_HORA.Codigo, g_frm_PI_Citaciones.P_Base_FechaTrabajo.ToString("HHmmss")));
                    lst_INTERNO_CodigoDescripcion_Modelo.Add(new INTERNO_CodigoDescripcion_Modelo(Variables.G_MDL_PARAMETRO_RUTA_EJERCICIO.Codigo, g_frm_PI_Citaciones.P_Base_ValoresGenerales.EjercicioActivo.anioControl));

                    str_RutaCompleta = Funciones.Transformar_Ruta(str_Ruta, str_NombreFichero, ".xlsx", lst_INTERNO_CodigoDescripcion_Modelo);
                    //...................................................................................................................................................

                    Funciones_FicherosExcel.Generar_DocumentoListado_Excel_SoloLineas(lst_INTERNO_ExportarExcel_Hoja_SinCabecera_Modelo, str_RutaCompleta);
                }
                else
                {
                    Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_EXPORTAREXCEL());
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(PI_Citaciones_Controladora) + "/" + nameof(Exportar_Excel_PorHojas_Fechas));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_EXPORTAREXCEL());
            }
        }
        #endregion

        #endregion

    }
}
