Example #1
0
        private void Page_Loaded(object sender, RoutedEventArgs e)
        {
            try
            {
                Mouse.OverrideCursor = System.Windows.Input.Cursors.Wait;

                DataTable dataTable = readGeneralData.GetDataTable("[dbo].[Read_TipoDocumentos]");
                DataRow   row       = dataTable.NewRow();
                row["Descripcion"]     = "Todos los documentos";
                row["IdTipoDocumento"] = 0;
                dataTable.Rows.Add(row);

                var items = (dataTable as IListSource).GetList();
                lstTipoDocumento.ItemsSource       = items;
                lstTipoDocumento.DisplayMemberPath = "Descripcion";
                lstTipoDocumento.SelectedValuePath = "IdTipoDocumento";
                lstTipoDocumento.SelectedIndex     = dataTable.Rows.Count - 1;

                datePick_inicio.Text = DateTime.Now.Date.ToString();
                datePick_fin.Text    = DateTime.Now.Date.AddDays(1).ToString();

                LoadGrid();
            }
            catch (Exception ex)
            {
                System.Windows.MessageBox.Show($"La base de datos ha sido alterada, contacte con soporte. Detalle: {ex}", "Base de datos alterada", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            finally
            {
                Mouse.OverrideCursor = null;
            }
        }
        public List <DetalleDocumento> Read_DocumentoDetalle()
        {
            List <DetalleDocumento> detalleDocumentos = new List <DetalleDocumento>();

            DataTable dataTableDocumentoDetalle = readGeneralData.GetDataTable("[dbo].[Read_DocumentoDetalle]", "@IdCabeceraDocumento", IdCabeceraDocumento);
            DataRow   row;

            DetalleDocumento detalleDocumento;

            for (int i = 0; i < dataTableDocumentoDetalle.Rows.Count; i++)
            {
                row = dataTableDocumentoDetalle.Rows[i];
                detalleDocumento = new DetalleDocumento()
                {
                    IdDocumentoDetalle  = Convert.ToInt32(row["IdDocumentoDetalle"].ToString()),
                    NumeroOrden         = Convert.ToInt32(row["NumeroOrden"].ToString()),
                    ValorVenta          = Convert.ToDecimal(row["ValorVenta"].ToString()),
                    Moneda              = row["Moneda"].ToString(),
                    Cantidad            = Convert.ToDecimal(row["Cantidad"]),
                    UnidadMedida        = row["UnidadMedida"].ToString(),
                    CodigoItem          = row["CodigoItem"].ToString(),
                    TipoPrecio          = row["TipoPrecio"].ToString(),
                    Descuento           = Convert.ToDecimal(row["Descuento"].ToString()),
                    TotalVenta          = Convert.ToDecimal(row["TotalVenta"].ToString()),
                    CodigoProductoSunat = row["CodigoProductoSunat"].ToString(),
                    CodigoProducto      = row["CodigoProducto"].ToString()
                };
                detalleDocumentos.Add(detalleDocumento);
            }

            return(detalleDocumentos);
        }
        private void btnSelecionar_Click(object sender, RoutedEventArgs e)
        {
            int cantidadSeleccionados             = 0;
            EmpresaDeclarante empresaSeleccionada = new EmpresaDeclarante();

            foreach (var empresaDeclarante in empresaDeclarantes)
            {
                if (empresaDeclarante._Selectable == true)
                {
                    cantidadSeleccionados++;
                }
            }

            switch (cantidadSeleccionados)
            {
            case 0:
                MessageBox.Show("Debe seleccionar una empresa.", "Ninguna selección detectada", MessageBoxButton.OK, MessageBoxImage.Information);
                break;

            case 1:
                foreach (var empresaDeclarante in empresaDeclarantes)
                {
                    if (empresaDeclarante._Selectable == true)
                    {
                        DataTable dataTable = readGeneralData.GetDataTable("[dbo].[Verify_User_Empresa]", "@IdDatosFox",
                                                                           empresaDeclarante._IdDatosFox, "@IdUsuario", data_Usuario.IdUsuario);

                        if (dataTable.Rows.Count > 0)
                        {
                            MessageBox.Show(
                                $" Ya has registrado datos de acceso a Sunat con esta empresa, y con este mismo usuario: {data_Usuario.IdUsuario}, " +
                                $" en caso de querer actualizar estos datos, debe hacerlo directamente en la opción de 'Configuración de sistema ->" +
                                $" Información del declarante' seleccione la empresa, y pulse 'Actualizar accesos sunat'",
                                "Duplicado de empresa", MessageBoxButton.OK, MessageBoxImage.Warning);
                        }
                        else
                        {
                            Declarante declarante = new Declarante(empresaDeclarante._IdEmisor, empresaDeclarante._IdDatosFox, data_Usuario);
                            declarante.Show();
                        }
                        break;      // Bandera al encontrar la empresa seleccionada
                    }
                }
                break;

            default:        // Mayor a una selección
                MessageBox.Show("Debe seleccionar sólo una empresa a la vez.", "Más de una selección detectada", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                break;
            }
        }
Example #4
0
        public List <Anticipo> Read_Anticipo()
        {
            List <Anticipo> anticipos       = new List <Anticipo>();
            ReadGeneralData readGeneralData = new ReadGeneralData();
            DataTable       dataTable       = readGeneralData.GetDataTable("[dbo].[Read_Anticipo]", "@IdCabeceraDocumento", IdCabeceraDocumento);

            DataRow  row;
            Anticipo anticipo;

            for (int i = 0; i < dataTable.Rows.Count; i++)
            {
                row      = dataTable.Rows[i];
                anticipo = new Anticipo()
                {
                    IdAnticipo          = Convert.ToInt32(row["IdAnticipo"].ToString()),
                    ComprobanteAnticipo = row["ComprobanteAnticipo"].ToString(),
                    TipoDocumento       = row["TipoDocumento"].ToString(),
                    Monto     = Convert.ToDecimal(row["Monto"].ToString()),
                    Moneda    = row["Moneda"].ToString(),
                    FechaPago = Convert.ToDateTime(row["FechaPago"].ToString())
                };
                anticipos.Add(anticipo);
            }

            return(anticipos);
        }
Example #5
0
        public List <SubTotalImpuestos> Read_SubTotalImpuesto()
        {
            List <SubTotalImpuestos> subTotalImpuestos = new List <SubTotalImpuestos>();
            ReadGeneralData          readGeneralData   = new ReadGeneralData();
            DataTable dataTable = readGeneralData.GetDataTable("[dbo].[Read_SubTotalImpuesto]", "@IdTotalImpuestos", IdTotalImpuestos);

            DataRow           row;
            SubTotalImpuestos subTotalImpuesto;

            for (int i = 0; i < dataTable.Rows.Count; i++)
            {
                row = dataTable.Rows[i];
                subTotalImpuesto = new SubTotalImpuestos()
                {
                    IdTotalImpuestos    = Convert.ToInt32(row["IdTotalImpuestos"].ToString()),
                    BaseImponible       = Convert.ToDecimal(row["BaseImponible"].ToString()),
                    TipoMonedaBase      = row["MBMoneda"].ToString(),
                    MontoTotal          = Convert.ToDecimal(row["MontoTotal"].ToString()),
                    TipoMonedaTotal     = row["MTMoneda"].ToString(),
                    PorcentajeImp       = Convert.ToDecimal(row["PorcentajeImp"].ToString()),
                    TipoAfectacion      = row["TipoAfectacion"].ToString(),
                    TipoSistemaISC      = string.Empty,     // Se considera irrelevante por parte de operaciones
                    CodigoTributo       = row["CodigoTributo"].ToString(),
                    CodigoInternacional = row["CodigoInternacional"].ToString(),
                    NombreTributo       = row["NombreTributo"].ToString()
                };
                subTotalImpuestos.Add(subTotalImpuesto);
            }

            return(subTotalImpuestos);
        }
Example #6
0
        private void txtUsuario_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                txtPassword.Focus();
            }
            else
            {
                DataTable dataTable = readGeneralData.GetDataTable("[dbo].[Read_User_Empresa]", "@IdUsuario", txtUsuario.Text.ToString().Trim());

                lstEmpresas.ItemsSource = null;
                lstEmpresas.Items.Clear();

                if (dataTable.Rows.Count < 1)
                {
                    DataRow row = dataTable.NewRow();
                    row["NombreLegal"]    = "Sin empresa";
                    row["IdAccesosSunat"] = 0;
                    dataTable.Rows.Add(row);
                }

                var items = (dataTable as IListSource).GetList(); //  Lista de empresas

                lstEmpresas.ItemsSource       = items;
                lstEmpresas.DisplayMemberPath = "NombreLegal";
                lstEmpresas.SelectedValuePath = "IdAccesosSunat";
                lstEmpresas.SelectedIndex     = 0;
            }
        }
        public List <Descuento> Read_Descuento_Total()
        {
            List <Descuento> descuentos = new List <Descuento>();
            DataTable        dataTable  = ReadGeneralData.GetDataTable("[dbo].[Read_Descuento_Total]", "@IdCabeceraDocumento", Id);

            Descuento descuento;
            DataRow   row;

            for (int i = 0; i < dataTable.Rows.Count; i++)
            {
                row       = dataTable.Rows[i];
                descuento = new Descuento()
                {
                    Indicador    = Convert.ToBoolean(row["Indicador"].ToString()),
                    CodigoMotivo = row["CodigoMotivo"].ToString(),
                    Factor       = Convert.ToDecimal(row["Factor"].ToString()),
                    Monto        = Convert.ToDecimal(row["Monto"].ToString()),
                    Moneda       = row["Moneda"].ToString(),
                    MontoBase    = Convert.ToDecimal(row["MontoBase"].ToString()),
                    MonedaBase   = row["MonedaBase"].ToString()
                };
                descuentos.Add(descuento);
            }

            return(descuentos);
        }
Example #8
0
 protected void Page_Load(object sender, EventArgs e)
 {
     if (!Page.IsPostBack)
     {
         dlstAprobarMiembro.DataSource = readGeneralData.GetDataTable("Negocio_Read_List_Nodes");
         dlstAprobarMiembro.DataBind();
     }
 }
        protected void Page_Load(object sender, EventArgs e)
        {
            ReadGeneralData readGeneralData = new ReadGeneralData();

            if (!Page.IsPostBack)
            {
                lstBancos.DataSource     = readGeneralData.GetDataTable("Negocio_List_Banks");
                lstBancos.DataValueField = "IdBanco";
                lstBancos.DataTextField  = "NombreBanco";
                lstBancos.DataBind();
            }
        }
Example #10
0
        //Metodo para cargar el grid de declarantes
        private async Task GetAccessosSunat()
        {
            dgEmpresasRegistradas.ItemsSource = null;
            dgEmpresasRegistradas.Items.Clear();

            DataTable dataTable = readGeneralData.GetDataTable("[dbo].[Read_List_User_Empresa]");

            if (dataTable.Rows.Count > 0)
            {
                var items = (dataTable as IListSource).GetList();
                dgEmpresasRegistradas.ItemsSource = items;
            }
        }
Example #11
0
        public List <Nota> Read(int tipo)
        {
            List <Nota>     notas           = new List <Nota>();
            ReadGeneralData readGeneralData = new ReadGeneralData();
            DataTable       dataTable;

            switch (tipo)
            {   //  Sí es de tipo 1 es porque se trata de la nota del documento, sí de tipo 2 es porque se trata de la nota por cada detalle de documento
            case 1:
                dataTable = readGeneralData.GetDataTable("[dbo].[Read_Nota_Total]", "@IdCabeceraDocumento", Id);
                break;

            case 2:
                dataTable = readGeneralData.GetDataTable("[dbo].[Read_Nota_Linea]", "@IdDocumentoDetalle", Id);
                break;

            default:
                dataTable = new DataTable();
                break;
            }

            Nota    nota;
            DataRow row;

            for (int i = 0; i < dataTable.Rows.Count; i++)
            {
                row  = dataTable.Rows[i];
                nota = new Nota()
                {
                    IdNota      = Convert.ToInt32(row["IdNota"].ToString()),
                    Descripcion = row["Descripcion"].ToString(),
                    Codigo      = row["Codigo"].ToString()
                };
                notas.Add(nota);
            }

            return(notas);
        }
Example #12
0
        public List <TotalImpuesto> Read_TotalImpuestos(int tipo)
        {
            List <TotalImpuesto> totalImpuestos  = new List <TotalImpuesto>();
            ReadGeneralData      readGeneralData = new ReadGeneralData();
            DataTable            dataTable;

            switch (tipo)
            {   //  Sí es de tipo 1 es porque se trata del impuesto del documento, sí de tipo 2 es porque se trata de el impuesto por cada detalle de documento
            case 1:
                dataTable = readGeneralData.GetDataTable("[dbo].[Read_TotalImpuestos_Total]", "@IdCabeceraDocumento", Id);
                break;

            case 2:
                dataTable = readGeneralData.GetDataTable("[dbo].[Read_TotalImpuestos_Linea]", "@IdDocumentoDetalle", Id);
                break;

            default:
                dataTable = new DataTable();
                break;
            }

            DataRow       row;
            TotalImpuesto totalImpuesto;

            for (int i = 0; i < dataTable.Rows.Count; i++)
            {
                row           = dataTable.Rows[i];
                totalImpuesto = new TotalImpuesto()
                {
                    IdTotalImpuestos = Convert.ToInt32(row["IdTotalImpuestos"].ToString()),
                    MontoTotal       = Convert.ToDecimal(row["MontoTotal"].ToString()),
                    TipoMonedaTotal  = row["Moneda"].ToString()
                };
                totalImpuestos.Add(totalImpuesto);
            }

            return(totalImpuestos);
        }
Example #13
0
        private void btnGuardar_Click(object sender, RoutedEventArgs e)
        {
            DataTable usuariosByid = readGeneralData.GetDataTable("[dbo].[Read_Usuario]", "@IdUsuario", txtUsuario.Text.ToString().Trim());

            if (usuariosByid.Rows.Count > 0)
            {
                System.Windows.MessageBox.Show("Lo sentimos este usuario ya existe.", "Error nombre de usuario", MessageBoxButton.OK, MessageBoxImage.Exclamation);
            }
            else
            {
                if (!string.IsNullOrEmpty(txtUsuario.Text.ToString().Trim()) && !string.IsNullOrEmpty(txtContrasenia.Password.Trim()) && !string.IsNullOrEmpty(txtVerificacionPass.Password.Trim()))
                {
                    if (txtContrasenia.Password.Trim() == txtVerificacionPass.Password.Trim())
                    {
                        if (txtContrasenia.Password.Trim().Length > 5)
                        {
                            Data_Usuario usuario = new Data_Usuario()
                            {
                                IdUsuario = txtUsuario.Text.ToString().Trim(), Contrasenia = txtContrasenia.Password.Trim(), IdRol = 1
                            };
                            if (usuario.Alter_Usuario("[dbo].[Create_Usuario]"))
                            {
                                System.Windows.MessageBox.Show($"Has registrado con exito a {txtUsuario.Text.ToString()}.", "Registro correcto",
                                                               MessageBoxButton.OK, MessageBoxImage.Information);
                                exitoCreacion = true;
                                Close();
                            }
                            else
                            {
                                System.Windows.MessageBox.Show($"Ha ocurrido un error de base de datos, verifique que el servicio " +
                                                               $" de SQL Server este activado en 'Servicios => SQLSERVER' clic derecho e INICIAR, sí el error persiste contacte con soporte.", "Error en la base de datos",
                                                               MessageBoxButton.OK, MessageBoxImage.Error);
                            }
                        }
                        else
                        {
                            MessageBox.Show("La cantidad mínima de caracteres para la contraseña es de 6", "Contraseña muy insegura", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Las contraseñas no coinciden.", "Error de coincidencia contraseña", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                    }
                }
                else
                {
                    MessageBox.Show("Antes de continuar debes completar todos los campos.", "Datos incompletos", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                }
            }
        }
Example #14
0
        public List <DocumentoRelacionado> Read_DocumentoRelacionado()
        {
            List <DocumentoRelacionado> documentoRelacionados = new List <DocumentoRelacionado>();
            DataTable dataTable = readGeneralData.GetDataTable("[dbo].[Read_DocumentoRelacionado]", "@IdCabeceraDocumento", IdCabeceraDocumento);
            DataRow   row;

            DocumentoRelacionado documentoRelacionado;

            for (int i = 0; i < dataTable.Rows.Count; i++)
            {
                row = dataTable.Rows[i];
                documentoRelacionado = new DocumentoRelacionado();
                documentoRelacionado.IdDocumentoRelacionado = Convert.ToInt32(row["IdDocumentoRelacionado"].ToString());
                documentoRelacionado.NroDocumento           = row["NroDocumento"].ToString();

                if (string.IsNullOrEmpty(row["IdCat_DocRelacionados"].ToString()))
                {
                    documentoRelacionado.TipoDocumentoRelacionado = "00";
                }
                else
                {
                    documentoRelacionado.TipoDocumentoRelacionado = readGeneralData.GetScalarValueSTRING("[dbo].[Query_Scalar_GetValue_TipoDocumentoRelacionado]",
                                                                                                         "@IdCat_DocRelacionados", Convert.ToInt32(row["IdCat_DocRelacionados"].ToString()));
                }

                documentoRelacionado.TipoOperacion = row["IdTipoOperacion"].ToString() ?? string.Empty;

                string temp = row["IdTipoDocumento"].ToString();

                if (string.IsNullOrEmpty(row["IdTipoDocumento"].ToString()))
                {
                    documentoRelacionado.TipoDocumento = "00";
                }
                else
                {
                    documentoRelacionado.TipoDocumento = readGeneralData.GetScalarValueSTRING("[dbo].[Query_Scalar_GetValue_TipoDocumento]",
                                                                                              "@IdTipoDocumento", Convert.ToInt32(row["IdTipoDocumento"].ToString()));
                }

                documentoRelacionados.Add(documentoRelacionado);
            }

            return(documentoRelacionados);
        }
        public List <Discrepancia> Read_DiscrepanciaDocumento()
        {
            List <Discrepancia> discrepancias = new List <Discrepancia>();
            DataTable           dataTable     = readGeneralData.GetDataTable("[dbo].[Read_DiscrepanciaDocumento]", "@IdCabeceraDocumento", IdCabeceraDocumento);
            DataRow             row;

            Discrepancia discrepancia;

            for (int i = 0; i < dataTable.Rows.Count; i++)
            {
                row          = dataTable.Rows[i];
                discrepancia = new Discrepancia()
                {
                    IdDiscrepanciaDocumento = Convert.ToInt32(row["IdDiscrepanciaDocumento"].ToString()),
                    Tipo        = row["TDCodigo"].ToString(),
                    Descripcion = row["TDDescripcion"].ToString()
                };
                discrepancias.Add(discrepancia);
            }

            return(discrepancias);
        }
Example #16
0
        public List <PrecioAlternativo> Read_PrecioAlternativo()
        {
            List <PrecioAlternativo> precioAlternativos = new List <PrecioAlternativo>();
            DataTable dataTable = readGeneralData.GetDataTable("[dbo].[Read_PrecioAlternativo]", "@IdDocumentoDetalle", IdDocumentoDetalle);

            DataRow           row;
            PrecioAlternativo precioAlternativo;

            for (int i = 0; i < dataTable.Rows.Count; i++)
            {
                row = dataTable.Rows[i];
                precioAlternativo = new PrecioAlternativo()
                {
                    IdPrecioAlternativo = Convert.ToInt32(row["IdPrecioAlternativo"].ToString()),
                    Monto      = Convert.ToDecimal(row["Monto"].ToString()),
                    TipoMoneda = row["TipoMoneda"].ToString(),
                    TipoPrecio = row["TipoPrecio"].ToString()
                };
                precioAlternativos.Add(precioAlternativo);
            }

            return(precioAlternativos);
        }
Example #17
0
        public async Task ValidateSystem()
        {
            try
            {
                ReadGeneralData readGeneralData       = new ReadGeneralData();
                DataTable       dataTableInternalData = readGeneralData.GetInternalDataTable("[dbo].[Read_DataAccess]");

                int cantidadFilas = dataTableInternalData.Rows.Count;

                InternalConnection internalConnection = new InternalConnection();

                if (cantidadFilas == 1) //  Comprobar que haya registro en db interna, primera vez que se ejecute el sistema
                {                       // Se comprueba que los valores sean correctos
                    InternalAccess internalAccess = new InternalAccess();
                    internalAccess.Read_InternalAccess();
                    string cadena = $"data source={@internalAccess.Servidor}; initial catalog=master; user id={@internalAccess.Usuario}; password={@internalAccess.Contrasenia}; Connection Timeout=50";

                    Connection connection = new Connection();

                    if (!connection.CheckConnection(cadena)) // Falló la conexión con los datos de InternalDB
                    {                                        // Actualizar la cadena de conexión mediante formulario
                        MessageBox.Show("No se ha podido realizar la conexión con la base de datos, este problema suele suceder cuando se han DETENIDO los servicios de SqlServer,    " +
                                        " para solucionar esto oprima la tecla Windows y escriba 'Servicios', en el panel mostrado busque 'SQL Server (MSSQLSERVER)' haga clic derecho sobre este " +
                                        " elemento y pulse INICIAR (el valor de 'MSSQLSERVER' puede variar según la configuración que se haya realizado), si el problema persiste, asegúrese de   " +
                                        " verificar que los accesos no se hayan cambiado, para esto pruebe la conexión en el siguiente formulario. ", "Error de conexión a SqlServer",
                                        MessageBoxButton.OK, MessageBoxImage.Error);
                        ConfigurarConeccionSQL configurarConeccionSQL = new ConfigurarConeccionSQL(true);
                        configurarConeccionSQL.Show();
                    }
                    else // Aquí ya no se tiene problemas con la base de datos
                    {
                        DataTable dataTable = readGeneralData.GetDataTable("[sysfox].[Read_List_DatosFox]");

                        int cantidadLineas = dataTable.Rows.Count;

                        if (cantidadLineas <= 0)
                        {
                            MessageBox.Show("Aún no tienes registrada ninguna empresa, puedes realizar este registro desde tu sistema Contasis.",
                                            "Error de conexión con los módulos Contasis", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                            Application.Current.Shutdown();
                        }
                        else
                        {
                            DataTable dtUsuarios = readGeneralData.GetDataTable("[dbo].[List_Usuarios]");

                            if (dtUsuarios.Rows.Count == 0)
                            {
                                MessageBox.Show("Aún no tienes registrado ningún usuario, registra tu usuario en el siguiente formulario.",
                                                "Debe registrar su usuario", MessageBoxButton.OK, MessageBoxImage.Information);
                                Usuarios usuarios = new Usuarios();
                                usuarios.Show();
                            }
                            else
                            {
                                Acceso acceso = new Acceso();
                                acceso.Show();
                            }
                        }
                    }
                }
                else                                                     // En caso de que no haya registro en db interna
                {                                                        // Comprobar la conexión con el servidor de SqlServer
                    string[] valores = internalConnection.GetDataFile(); // Obtenemos los datos del archivo txt

                    if (valores.Length > 1)
                    {
                        if (!string.IsNullOrEmpty(valores[0]) && !string.IsNullOrEmpty(valores[1]) && !string.IsNullOrEmpty(valores[2]))
                        {
                            Connection connection = new Connection();
                            string     cadena     = $"data source={valores[0]}; initial catalog=master; user id={valores[1]}; password={valores[2]};";
                            if (connection.CheckConnection(cadena))                //  Verificamos que la cadena de conexión con el Servidor de SQL sea correcta
                            {
                                if (internalConnection.Create_DataAccess(valores)) // Sólo si la cadena de conexión es correcta procedemos a registrar en InternalDB
                                {
                                    Application.Current.Shutdown();
                                    System.Windows.Forms.Application.Restart();
                                }
                            }
                        }
                    }
                    else // Sí no es correcto se pide configurar de forma manual (Formulario)
                    {
                        MessageBox.Show("Se debe configurar de forma manual la conexión a la base de datos.", "Configuración requerida", MessageBoxButton.OK, MessageBoxImage.Information);
                        ConfigurarConeccionSQL configurarConeccionSQL = new ConfigurarConeccionSQL(false);
                        configurarConeccionSQL.Show();
                    }
                }
            }
            catch (Exception)
            {
            }
        }
Example #18
0
        private void btnDescargarXML_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                int    documentosSinXML = 0;
                string mensajeFinal     = string.Empty;

                List <Data_Documentos> selected_data_Documentos = new List <Data_Documentos>();
                foreach (var data_Documento in data_Documentos)
                {
                    if (data_Documento.Selectable == true)
                    {
                        selected_data_Documentos.Add(data_Documento);
                    }

                    if (data_Documento.EstadoSunat == "Pendiente")
                    {
                        documentosSinXML++;
                    }
                }

                if (selected_data_Documentos.Count() > 0)
                {
                    if (documentosSinXML > 0)
                    {
                        System.Windows.MessageBox.Show("Ha seleccionado uno o más documentos que aún no se envían a Sunat (Pendiente), por este motivo aún no se ha" +
                                                       " generado su respectivo XML, envíe el(los) documentos y vuelva a intentarlo", "Documento sin XML", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                    }
                    else
                    {
                        string pdfsNoEncontrados = string.Empty;
                        string rutaDescarga      = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

                        VistaFolderBrowserDialog dialog = new VistaFolderBrowserDialog();
                        dialog.Description            = "Seleccione el directorio donde desea guardar los archivos.";
                        dialog.UseDescriptionForTitle = true;


                        if (!VistaFolderBrowserDialog.IsVistaFolderDialogSupported)
                        {
                            System.Windows.MessageBox.Show("Estimado usuario estas empleando una versión muy antigua de Windows, algunas funciones están restringidas, " +
                                                           "tu documento será descargado en el directorio MIS DOCUMENTOS.", "Algunas funciones no están soportadas en tu sistema operativo",
                                                           MessageBoxButton.OK, MessageBoxImage.Information);
                        }
                        else
                        {
                            var resultado = dialog.ShowDialog();
                            if (resultado.HasValue && resultado.Value)
                            {
                                rutaDescarga = dialog.SelectedPath;

                                ProgressDialogResult result = ProgressWindow.Execute(padre, "Procesando...", () => {
                                    foreach (var selected_data_Documento in selected_data_Documentos)
                                    {
                                        var nombreArchivo =
                                            $"{data_Contribuyente.NroDocumento}-{selected_data_Documento.TipoDocumento}-{selected_data_Documento.SerieCorrelativo}";

                                        if (!Directory.Exists($"{rutaDescarga}\\{nombreArchivo}"))
                                        {
                                            Directory.CreateDirectory($"{rutaDescarga}\\{nombreArchivo}");
                                        }

                                        #region PDF
                                        try
                                        {
                                            if (!File.Exists($"{selected_data_Documento.Ruta}\\{nombreArchivo}\\{nombreArchivo}.pdf"))
                                            {
                                                pdfsNoEncontrados += $"{selected_data_Documento.SerieCorrelativo}, ";
                                            }
                                            else
                                            {
                                                File.Copy($"{selected_data_Documento.Ruta}\\{nombreArchivo}\\{nombreArchivo}.pdf",
                                                          $"{rutaDescarga}\\{nombreArchivo}\\{nombreArchivo}.pdf", true);
                                            }
                                        }
                                        catch (Exception ex)
                                        {
                                            var msg  = string.Concat(ex.InnerException?.Message, ex.Message);
                                            data_Log = new Data_Log()
                                            {
                                                DetalleError   = $"Detalle del error: {msg}",
                                                Comentario     = "Error al leer o guardar PDF de representación impresa",
                                                IdUser_Empresa = data_Usuario.IdUser_Empresa
                                            };
                                            data_Log.Create_Log();
                                        }
                                        #endregion PDF

                                        DataTable datosDocumento =
                                            readGeneralData.GetDataTable("[dbo].[Query_Scalar_GetXml_Documento]", "@IdDocumento", selected_data_Documento.IdDocumento);
                                        DataRow row = datosDocumento.Rows[0];

                                        File.WriteAllBytes($"{rutaDescarga}\\{nombreArchivo}\\{nombreArchivo}.xml", Convert.FromBase64String(row["XmlFirmado"].ToString()));

                                        if (!string.IsNullOrEmpty(row["CdrSunat"].ToString()))
                                        {
                                            File.WriteAllBytes($"{rutaDescarga}\\{nombreArchivo}\\R-{nombreArchivo}.zip", Convert.FromBase64String(row["CdrSunat"].ToString()));
                                        }

                                        datosDocumento.Clear();
                                    }
                                });

                                if (!string.IsNullOrEmpty(pdfsNoEncontrados))
                                {
                                    mensajeFinal = $"El(los) documento(s) xml fueron guardados en :{dialog.SelectedPath} pero no hemos podido encontrar la" +
                                                   $" representación impresa de los siguientes documentos: {pdfsNoEncontrados}";
                                }
                                else
                                {
                                    mensajeFinal = $"El(los) documento(s) fueron guardados en :{dialog.SelectedPath}";
                                }

                                CustomDialogWindow customDialogWindow = new CustomDialogWindow();
                                customDialogWindow.Buttons            = CustomDialogButtons.OK;
                                customDialogWindow.Caption            = "Detalle";
                                customDialogWindow.DefaultButton      = CustomDialogResults.OK;
                                customDialogWindow.InstructionHeading = "Resultados de la descarga del documento(s)";
                                customDialogWindow.InstructionIcon    = CustomDialogIcons.Information;
                                customDialogWindow.InstructionText    = mensajeFinal;
                                CustomDialogResults customDialogResults = customDialogWindow.Show();

                                LoadGrid();
                            }
                        }
                    }
                }
                else
                {
                    System.Windows.Forms.MessageBox.Show("Debe seleccionar al menos un documento");
                }
            }
            catch (Exception ex)
            {
                var msg = string.Concat(ex.InnerException?.Message, ex.Message);
                System.Windows.MessageBox.Show(msg, "Error al descargar los archivos del documento", MessageBoxButton.OK, MessageBoxImage.Error);
                data_Log = new Data_Log()
                {
                    DetalleError   = $"Detalle del error: {msg}",
                    Comentario     = "Error al descargar los archivos del documento",
                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                };
                data_Log.Create_Log();
            }
        }