using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Modelos_Volcado;
using Exferia_Contabilidad._0_Modelos;
using Exferia_Contabilidad._1_Datos;
using Exferia_Contabilidad._3_Vistas.Listados;
using Exferia_Contabilidad.General;
using Exferia_EntityFramework;
using Exferia_Formularios;
using Exferia_General;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Transactions;
using System.Windows.Forms;
using static Exferia_Aplicacion.General.Enumerados;

namespace Exferia_Contabilidad._3_Vistas.Controladoras
{
    public class P_Procesos_VolcarDocumento_Controladora
    {
        #region Variables Generales
        private P_Procesos_VolcarDocumento g_frm_P_Procesos_VolcarDocumento = 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 string g_str_Opcion = "";

        public List<DataGridViewRow> g_lst_Filas = null;
        public P_Base g_frm_P_Base_Listado = null;

        private Funciones_Volcado g_obj_Funciones_Volcado = new Funciones_Volcado();

        private List<INTERNO_ActualizarCampoListadoGeneral_Modelo> g_lst_INTERNO_ActualizarCampoListadoGeneral_Modelo = new List<INTERNO_ActualizarCampoListadoGeneral_Modelo>();

        private CTA_VolcadoCabecera_Datos g_obj_CTA_VolcadoCabecera_Datos = new CTA_VolcadoCabecera_Datos();

        //Tareea Asincrona 
        private BackgroundWorker g_obj_TareaAsincrona_Volcar_Documentos;

        #endregion

        // Constructor de la clase Logica
        public P_Procesos_VolcarDocumento_Controladora(P_Procesos_VolcarDocumento _frm_P_Procesos_VolcarDocumento)
        {
            g_frm_P_Procesos_VolcarDocumento = _frm_P_Procesos_VolcarDocumento;
        }

        public void Volcar_Documentos()
        {
            try
            {
                g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_VOLCANDO_DOCUMENTO());

                // Si la tarea asincrona esta en marcha la paro
                if (g_obj_TareaAsincrona_Volcar_Documentos != null)
                {
                    while (g_obj_TareaAsincrona_Volcar_Documentos.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_Volcar_Documentos = new BackgroundWorker();
                    g_obj_TareaAsincrona_Volcar_Documentos.DoWork += new DoWorkEventHandler(TareaAsincrona_Volcar_Documentos_DoWork);
                    g_obj_TareaAsincrona_Volcar_Documentos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Volcar_Documentos_Completed);
                    g_obj_TareaAsincrona_Volcar_Documentos.WorkerReportsProgress = false;
                    g_obj_TareaAsincrona_Volcar_Documentos.WorkerSupportsCancellation = false;
                }

                g_obj_TareaAsincrona_Volcar_Documentos.RunWorkerAsync();

                //Mostrar Pantalla de Espera
                g_frm_PE_Esperando.ShowDialog();
            }
            catch (Exception ex)
            {
                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }

                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_Procesos_VolcarDocumento_Controladora) + "/" + nameof(Volcar_Documentos));
            }
        }

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

            string str_Resultado = "";

            try
            {
                //Campo Clave
                string str_NombreCampoClave = "id";
                long lng_id = -1;
                g_lst_INTERNO_ActualizarCampoListadoGeneral_Modelo = new List<INTERNO_ActualizarCampoListadoGeneral_Modelo>();
                List<long> lst_idVolcadoCabecera_InCorrectos = new List<long>();
                List<CTA_VolcadoCabecera> lst_CTA_VolcadoCabecera = null;
                List<long> lst_idVolcadoCabecera = new List<long>();
                bool bol_CerrarPrimero = true;
                long lng_idVolcadoCabecera_APasarDiario = -1;
                List<long> lst_idPredefinidoCabecera = null;
                List<long> lst_idAuxiliar = null;
                string str_Opcion = "";
                long lng_idDocumento = -1;

                //Variables Exportacion Resultado
                int int_TotalExportados = 0;

                List<long> lst_id_Seleccionados = g_lst_Filas
                                    .Cast<DataGridViewRow>()
                                    .Select(m => m.Cells[str_NombreCampoClave].Value.ToString()).ToList().ConvertAll<long>(x => long.Parse(x));


                //Listado general de datos para poder cerrarlos ............................................
                List<INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo> lst_ListadoRegistros = null;
                
                //Vencimentos Socios
                if (g_str_Opcion.Equals(Variables.G_STR_OPCION_VTA_VENCIMIENTO_AUX_1))
                {
                    //Cargamos el ensamblado #########################################################################################################################################################################
                    Assembly m_assembly_1 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_VENTAS + ".dll");
                    //Obtenemos el tipo de la clase
                    Type m_type_1 = m_assembly_1.GetType("" + Variables.G_STR_LIBRERIA_VENTAS + "." + Variables.G_STR_LIBRERIA_DATOSVENTAS);
                    //creamos la instancia
                    var obj_Clase_1 = Activator.CreateInstance(m_type_1);
                    //Cargamos el metodo solicitado
                    MethodInfo obj_MethodInfo_1 = obj_Clase_1.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSVENTAS_PROCEDIMIENTO_VTAVENCIMIENTOS_CERRARABRIRVOLCARDESVOLCAR_DOCUMENTO, BindingFlags.Instance | BindingFlags.NonPublic);

                    //Obtener valores
                    object[] arr_Parametros_1 = { lst_id_Seleccionados };

                    //Pasamos los parametros al metodo y lo ejecutamos
                    lst_ListadoRegistros = (List<INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo>)obj_MethodInfo_1.Invoke(obj_Clase_1, arr_Parametros_1);
                    //##################################################################################################################################################################################################

                }
                //VolcadoCabecera
                else if (g_str_Opcion.Equals(Variables.G_STR_OPCION_CTA_VOLCADOCABECERA))
                {
                    CTA_VolcadoCabecera_Datos obj_CTA_VolcadoCabecera_Datos = new CTA_VolcadoCabecera_Datos();
                    lst_ListadoRegistros = obj_CTA_VolcadoCabecera_Datos.Obtener_VolcadoCabecera_CerrarAbrirVolcarDesvolcar_Documento(lst_id_Seleccionados);
                }

                if (lst_ListadoRegistros != null && lst_ListadoRegistros.Count > 0)
                {
                    foreach (DataGridViewRow dgvr_Fila in g_lst_Filas)
                    {
                        //Inicializar Variables
                        bol_CerrarPrimero = true;
                        lng_idVolcadoCabecera_APasarDiario = -1;
                        lst_idPredefinidoCabecera = new List<long>();
                        lst_idAuxiliar = null;
                        str_Opcion = "";

                        //id principal
                        lng_id = long.Parse(dgvr_Fila.Cells[str_NombreCampoClave].Value.ToString());

                        //Buscarlo en el Listado
                        INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo = lst_ListadoRegistros.Where(m => m.idDocumento_Auxiliar.Equals(lng_id)).FirstOrDefault();

                        if (mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo != null)
                        {      
                            //Si es VolcadoCabcera 
                            if (g_str_Opcion.Equals(Variables.G_STR_OPCION_CTA_VOLCADOCABECERA))
                            {
                                //Si son Facturas, se pone de opcion vencimientos para que tambien le cambie el estado
                                if (Variables.G_PREDEFINIDOFICHEROS_FACTURASDEVENTA.Id.Equals(mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idPredefinidosFicheros))
                                {
                                    lng_idDocumento = mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idDocumento_Relacionado;

                                    //Cargamos el ensamblado #########################################################################################################################################################################
                                    Assembly m_assembly_1 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_VENTAS + ".dll");
                                    //Obtenemos el tipo de la clase
                                    Type m_type_1 = m_assembly_1.GetType("" + Variables.G_STR_LIBRERIA_VENTAS + "." + Variables.G_STR_LIBRERIA_DATOSVENTAS);
                                    //creamos la instancia
                                    var obj_Clase_1 = Activator.CreateInstance(m_type_1);
                                    //Cargamos el metodo solicitado
                                    MethodInfo obj_MethodInfo_1 = obj_Clase_1.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSVENTAS_PROCEDIMIENTO_VTAVENCIMIENTOS_OBTENER_POR_FACTURA, BindingFlags.Instance | BindingFlags.NonPublic);

                                    //Obtener valores
                                    object[] arr_Parametros_1 = { lng_idDocumento };

                                    //Pasamos los parametros al metodo y lo ejecutamos
                                    lst_idAuxiliar = (List<long>)obj_MethodInfo_1.Invoke(obj_Clase_1, arr_Parametros_1);
                                    //##################################################################################################################################################################################################

                                    if (lst_idAuxiliar != null && lst_idAuxiliar.Count > 0)
                                    {
                                        str_Opcion = Variables.G_STR_OPCION_VTA_VENCIMIENTO_AUX_1;
                                    }
                                }


                                lng_idVolcadoCabecera_APasarDiario = lng_id;
                                bol_CerrarPrimero = false;
                                lst_idPredefinidoCabecera = null;
                            }
                            else
                            {
                                //Ver si tengo que actualizar el estado tambien de los registros relacionales (Vencimientos) ........................................................
                                if (g_str_Opcion.Equals(Variables.G_STR_OPCION_VTA_VENCIMIENTO_AUX_1))
                                {
                                    //Cargamos el ensamblado #########################################################################################################################################################################
                                    Assembly m_assembly_1 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_VENTAS + ".dll");
                                    //Obtenemos el tipo de la clase
                                    Type m_type_1 = m_assembly_1.GetType("" + Variables.G_STR_LIBRERIA_VENTAS + "." + Variables.G_STR_LIBRERIA_DATOSVENTAS);
                                    //creamos la instancia
                                    var obj_Clase_1 = Activator.CreateInstance(m_type_1);
                                    //Cargamos el metodo solicitado
                                    MethodInfo obj_MethodInfo_1 = obj_Clase_1.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSVENTAS_PROCEDIMIENTO_VTAVENCIMIENTOS_OBTENER_POR_FACTURA, BindingFlags.Instance | BindingFlags.NonPublic);

                                    //Obtener valores
                                    object[] arr_Parametros_1 = { mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idDocumento };

                                    //Pasamos los parametros al metodo y lo ejecutamos
                                    lst_idAuxiliar = (List<long>)obj_MethodInfo_1.Invoke(obj_Clase_1, arr_Parametros_1);
                                    //##################################################################################################################################################################################################

                                    if (lst_idAuxiliar != null && lst_idAuxiliar.Count > 0)
                                    {
                                        str_Opcion = g_str_Opcion;
                                    }
                                }
                                //...............................................................................................................................

                                lng_idDocumento = mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idDocumento;

                                //Listado de VolcadoCabecera Si lo tueviera.....................................
                                lst_CTA_VolcadoCabecera = g_obj_CTA_VolcadoCabecera_Datos.Obtener_ModeloListado_Por_DocumentoPredefinidosFicheros(mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idDocumento, mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.Listado_idPredefinidosFicheros);
                                if (lst_CTA_VolcadoCabecera != null)
                                {
                                    lst_idPredefinidoCabecera.AddRange(lst_CTA_VolcadoCabecera.Select(m => m.idPredefinidoFichero).ToList());
                                }

                                // Saber si ya estaba Cerrado
                                if (lst_CTA_VolcadoCabecera != null && lst_CTA_VolcadoCabecera.Count > 0)
                                {
                                    bol_CerrarPrimero = false;
                                    lng_idVolcadoCabecera_APasarDiario = lst_CTA_VolcadoCabecera.FirstOrDefault().id;
                                }
                                //..............................................................................


                                //Formar el listado de PredefinidosCabecera ........................................
                                if (mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idPredefinidoCabecera_1 != null && mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idPredefinidoCabecera_1.Value > 0)
                                {
                                    lst_idPredefinidoCabecera.Add(mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idPredefinidoCabecera_1.Value);
                                }
                                if (mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idPredefinidoCabecera_2 != null && mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idPredefinidoCabecera_2.Value > 0)
                                {
                                    lst_idPredefinidoCabecera.Add(mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idPredefinidoCabecera_2.Value);
                                }
                                if (mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idPredefinidoCabecera_3 != null && mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idPredefinidoCabecera_3.Value > 0)
                                {
                                    lst_idPredefinidoCabecera.Add(mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idPredefinidoCabecera_3.Value);
                                }
                                if (mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idPredefinidoCabecera_4 != null && mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idPredefinidoCabecera_4.Value > 0)
                                {
                                    lst_idPredefinidoCabecera.Add(mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idPredefinidoCabecera_4.Value);
                                }
                                if (mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idPredefinidoCabecera_5 != null && mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idPredefinidoCabecera_5.Value > 0)
                                {
                                    lst_idPredefinidoCabecera.Add(mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idPredefinidoCabecera_5.Value);
                                }
                                //..................................................................................
                            }

                            using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required))
                            {
                                try
                                {


                                    mdl_ValorDevuelto_Modelo = g_obj_Funciones_Volcado.Volcar_Documento(lng_idVolcadoCabecera_APasarDiario,
                                                                                                    g_frm_P_Procesos_VolcarDocumento.P_Base_ValoresGenerales.lng_idEmpresa,
                                                                                                    g_frm_P_Procesos_VolcarDocumento.P_Base_ValoresGenerales.EjercicioActivo.id,
                                                                                                    mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.Fecha,
                                                                                                    g_frm_P_Procesos_VolcarDocumento.P_Base_ValoresGenerales.Ejercicios_Listado.ToList(),
                                                                                                    mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.idPredefinidosFicheros,
                                                                                                    bol_CerrarPrimero,
                                                                                                    lst_idPredefinidoCabecera,
                                                                                                    lng_idDocumento,
                                                                                                    str_Opcion,
                                                                                                    lst_idAuxiliar);
                                    //Incorrecto
                                    if (!mdl_ValorDevuelto_Modelo.TodoCorrecto)
                                    {
                                        lst_idVolcadoCabecera_InCorrectos.Add(lng_id);

                                        str_Resultado += "REGISTRO ---" + System.Environment.NewLine;
                                        str_Resultado += Componer_Datos_Linea(dgvr_Fila) + System.Environment.NewLine;
                                        str_Resultado += "ERROR : " + mdl_ValorDevuelto_Modelo.Mensaje + System.Environment.NewLine;
                                    }
                                    //Correcto
                                    else
                                    {
                                        //Termino Transaccion
                                        transaccion_SQL.Complete();

                                        //idVolcadoCabecera, se coje de aquie porque si el documento no estaba cerrado, el idVolcadoCabecera se generar dentro
                                        if (mdl_ValorDevuelto_Modelo.Objeto_Auxiliar_3 != null &&
                                            mdl_ValorDevuelto_Modelo.Objeto_Auxiliar_3.ToString().Trim().Length > 0)
                                        {
                                            lst_idVolcadoCabecera.Add(long.Parse(mdl_ValorDevuelto_Modelo.Objeto_Auxiliar_3.ToString()));
                                        }
                                        
                                        //Actualizar columna Estado del Grid
                                        if (mdl_ValorDevuelto_Modelo.Objeto_Auxiliar_2 != null &&
                                            mdl_ValorDevuelto_Modelo.Objeto_Auxiliar_2.ToString().Trim().Length > 0 &&
                                            mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.nombreCampoEstado != null &&
                                            mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.nombreCampoEstado.Trim().Length > 0)
                                        {
                                            g_lst_INTERNO_ActualizarCampoListadoGeneral_Modelo.Add(new INTERNO_ActualizarCampoListadoGeneral_Modelo(lng_id, mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.nombreCampoEstado, mdl_ValorDevuelto_Modelo.Objeto_Auxiliar_2));
                                        }

                                        //Actualizar columna Volcado del Grid
                                        if (mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.nombreCampoVolcado != null && mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.nombreCampoVolcado.Trim().Length > 0)
                                        {
                                            g_lst_INTERNO_ActualizarCampoListadoGeneral_Modelo.Add(new INTERNO_ActualizarCampoListadoGeneral_Modelo(lng_id, mdl_INTERNO_CerrarAbrirVolcarDesvolcar_Documento_Modelo.nombreCampoVolcado, mdl_ValorDevuelto_Modelo.Objeto_Auxiliar_1));
                                        }
                                    }
                                }
                                catch (Control_Errores)
                                { }
                                catch (Exception)
                                { }
                                finally
                                {
                                    transaccion_SQL.Dispose();
                                }
                            }
                        }
                        else
                        {
                            lst_idVolcadoCabecera_InCorrectos.Add(lng_id);

                            str_Resultado += "REGISTRO ---" + System.Environment.NewLine;
                            str_Resultado += Componer_Datos_Linea(dgvr_Fila) + System.Environment.NewLine;
                            str_Resultado += "ERROR : No encontro la Fecha del Volcado." + System.Environment.NewLine;
                        }
                    }
                }
                else
                {
                    str_Resultado = "ERROR : No encontro ningun registro." + System.Environment.NewLine;
                    lst_idVolcadoCabecera_InCorrectos.AddRange(lst_id_Seleccionados);
                }

                //Generar en ContaPlus si estuviera marcado
                if (g_frm_P_Procesos_VolcarDocumento.P_Base_ValoresGenerales.Control!=null &&
                    g_frm_P_Procesos_VolcarDocumento.P_Base_ValoresGenerales.Control.idVolcadoExportacion!=null &&
                    g_frm_P_Procesos_VolcarDocumento.P_Base_ValoresGenerales.Control.idVolcadoExportacion.Equals(Variables.G_LNG_VOLCADOEXPORTACION_CONTAPLUS))
                {
                    mdl_ValorDevuelto_Modelo =g_obj_Funciones_Volcado.Exportar_Contaplus(lst_idVolcadoCabecera);
                    if (mdl_ValorDevuelto_Modelo.TodoCorrecto == false)
                    {
                        str_Resultado += "EXPORTACION " + System.Environment.NewLine;
                        str_Resultado += "ERROR : " + mdl_ValorDevuelto_Modelo.Mensaje + System.Environment.NewLine;
                    }
                    else
                    {
                        if (mdl_ValorDevuelto_Modelo.Objeto_Auxiliar_1 != null)
                        {
                            int_TotalExportados =int.Parse( mdl_ValorDevuelto_Modelo.Objeto_Auxiliar_1.ToString());
                        }
                    }
                }


                //Resultado .........................................
                str_Resultado = "........................................................." + System.Environment.NewLine + System.Environment.NewLine + str_Resultado;
                str_Resultado = "EXPORTADOS :" + int_TotalExportados.ToString() + System.Environment.NewLine + str_Resultado;
                str_Resultado = "INCORRECTOS :" + lst_idVolcadoCabecera_InCorrectos.Count.ToString() + System.Environment.NewLine + str_Resultado;
                str_Resultado = "CORRECTOS :" + g_lst_INTERNO_ActualizarCampoListadoGeneral_Modelo.Count.ToString() + System.Environment.NewLine + str_Resultado;

                mdl_ValorDevuelto_Modelo.TodoCorrecto = true;
                mdl_ValorDevuelto_Modelo.Mensaje = str_Resultado;
                //...................................................
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_Procesos_VolcarDocumento_Controladora) + "/" + nameof(TareaAsincrona_Volcar_Documentos_DoWork));

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_ERROR_VOLCAR_DOCUMENTO();
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_ERROR_VOLCAR_DOCUMENTO();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_Procesos_VolcarDocumento_Controladora) + "/" + nameof(TareaAsincrona_Volcar_Documentos_DoWork));

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_ERROR_VOLCAR_DOCUMENTO();
            }
            finally
            {
                e.Result = mdl_ValorDevuelto_Modelo;
            }
            
        }
        private void TareaAsincrona_Volcar_Documentos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }

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

                if (mdl_ValorDevuelto_Modelo != null && mdl_ValorDevuelto_Modelo.Mensaje != null && mdl_ValorDevuelto_Modelo.Mensaje.Trim().Length > 0)
                {
                    g_frm_P_Procesos_VolcarDocumento.Exferia_TextBox_Resultado.Text = mdl_ValorDevuelto_Modelo.Mensaje;
                }

                //Si esta Todo Correcto, Recargo el Listado
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    try
                    {
                        if (g_frm_P_Base_Listado != null)
                        {
                            g_frm_P_Base_Listado.P_Base_ActualizarRegistros_Campo(g_lst_INTERNO_ActualizarCampoListadoGeneral_Modelo, G_ENUM_TIPOACCION.INT_MODIFICAR);
                        }
                    }
                    catch (Exception)
                    { }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Procesos_VolcarDocumento_Controladora) + "/" + nameof(TareaAsincrona_Volcar_Documentos_Completed));
            }
        }

        private string Componer_Datos_Linea(DataGridViewRow _dgvr_Fila)
        {
            string str_Valor_Devuelto = "";
            foreach (DataGridViewCell dgvc_Celda in _dgvr_Fila.Cells)
            {
                if (dgvc_Celda.Visible)
                {
                    str_Valor_Devuelto += dgvc_Celda.Value.ToString() + " || ";
                }
            }

            return str_Valor_Devuelto;
        }


    }
}
