Example #1
0
        private void chkCell_Unchecked(object sender, RoutedEventArgs e)
        {
            CheckBox        checkBox        = (CheckBox)e.OriginalSource;
            DataGridRow     dataGridRow     = VisualTreeHelpers.FindAncestor <DataGridRow>(checkBox);
            Data_Documentos data_Documentos = (Data_Documentos)dataGridRow.DataContext;

            data_Documentos.Selectable = false;
        }
Example #2
0
        public void LoadData()
        {
            try
            {
                Mouse.OverrideCursor = Cursors.Wait;
                Data_Documentos data_Documento = new Data_Documentos(IdDocumento);   //  IdDocumento variable global
                data_Documento.Read_Documento();

                Data_CabeceraDocumento cabeceraDocumento = new Data_CabeceraDocumento(data_Documento.IdCabeceraDocumento);
                cabeceraDocumento.Read_CabeceraDocumento();

                Data_Contribuyente Receptor = new Data_Contribuyente(cabeceraDocumento.IdReceptor);
                Receptor.Read_Contribuyente();

                lblTipoDocumento.Content = data_Documento.TDDescripcion;

                if (!string.IsNullOrEmpty(cabeceraDocumento.FechaEmision.ToString()))
                {
                    lblFechaRecepcion.Content = cabeceraDocumento.FechaEmision.ToString();
                }
                else
                {
                    lblFechaRecepcion.Content = "----/--/--";
                }

                if (!string.IsNullOrEmpty(data_Documento.FechaEmisionSUNAT.ToString()))
                {
                    lblFechaEmision.Content = data_Documento.FechaEmisionSUNAT.ToString();
                }
                else
                {
                    lblFechaEmision.Content = "----/--/--";
                }

                lblCliente.Content = Receptor.NombreComercial;
                lblTotal.Content   = cabeceraDocumento.ImporteTotalVenta.ToString() + " " + cabeceraDocumento.DescripcionMoneda;
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Ha ocurrido un error al cargar los registros, detalle del error: {ex}",
                                "Error al cargar los datos", MessageBoxButton.OK, MessageBoxImage.Error);
                var      msg      = string.Concat(ex.InnerException?.Message, ex.Message);
                Data_Log data_Log = new Data_Log()
                {
                    DetalleError   = $"Detalle del error: {msg}",
                    Comentario     = "Error al enviar el documento a sunat desde la interfaz",
                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                };
                data_Log.Create_Log();
            }
            finally {
                Mouse.OverrideCursor = null;
            }
        }
Example #3
0
        public Factura_Sunat(Window parent, Data_Usuario usuario)
        {
            InitializeComponent();
            padre = parent;
            Data_Documentos documentos = new Data_Documentos();

            _Documentos  = (IData_Documentos)documentos;
            data_Usuario = usuario;

            data_DatosFox = new Data_DatosFox(data_Usuario.IdDatosFox);
            data_DatosFox.Read_DatosFox();

            data_Contribuyente = new Data_Contribuyente(data_DatosFox.IdEmisor);
            data_Contribuyente.Read_Contribuyente();
        }
Example #4
0
        public GenerarComunicacionBaja(Window parent, Data_Usuario usuario)
        {
            InitializeComponent();
            padre        = parent;
            data_Usuario = usuario;

            Data_Documentos documentos = new Data_Documentos();

            _Documentos = (IGetDataAsync)documentos;

            data_DatosFox = new Data_DatosFox(data_Usuario.IdDatosFox);
            data_DatosFox.Read_DatosFox();

            data_Contribuyente = new Data_Contribuyente(data_DatosFox.IdEmisor);
            data_Contribuyente.Read_Contribuyente();
        }
Example #5
0
        public Page_ListaResumenDiario(Window parent, Data_Usuario usuario)
        {
            InitializeComponent();
            padre        = parent;
            data_Usuario = usuario;

            Data_Documentos documentos = new Data_Documentos();

            _Documentos = (IGetDataAsync)documentos;

            data_DatosFox = new Data_DatosFox(data_Usuario.IdDatosFox);
            data_DatosFox.Read_DatosFox();

            data_Contribuyente = new Data_Contribuyente(data_DatosFox.IdEmisor);
            data_Contribuyente.Read_Contribuyente();
        }
Example #6
0
        private void btnGuardar_Click(object sender, RoutedEventArgs e)
        {
            Data_Documentos data_Documento = new Data_Documentos()
            {
                IdDocumento = IdDocumento, MotivoBaja = txtDetalleMotivoBaja.Text.ToString()
            };

            if (!data_Documento.Update_Documento_OneColumn("[dbo].[Update_Documento_MotivoBaja]"))
            {
                Data_Log data_Log = new Data_Log()
                {
                    DetalleError   = "Error al actualizar el motivo de baja del documento",
                    Comentario     = "Error con la base de datos: [dbo].[Update_Documento_MotivoBaja]",
                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                };
                data_Log.Create_Log();
            }
            else
            {
                Close();
            }
        }
Example #7
0
        public EnviarDocumentoRequest Data(string tramaXmlFirmado, Data_Documentos data_Documento, string endPointUrl)
        {
            Data_AccesosSunat data_AccesosSunat = new Data_AccesosSunat(data_Documento.IdEmisor);

            data_AccesosSunat.Read_AccesosSunat();

            Data_Contribuyente data_Contribuyente = new Data_Contribuyente(data_Documento.IdEmisor);

            data_Contribuyente.Read_Contribuyente();

            var enviarDocumentoRequest = new EnviarDocumentoRequest()
            {
                Ruc             = data_Contribuyente.NroDocumento,
                UsuarioSol      = data_AccesosSunat.UsuarioSol,
                ClaveSol        = data_AccesosSunat.ClaveSol,
                EndPointUrl     = endPointUrl,
                IdDocumento     = data_Documento.SerieCorrelativo,
                TipoDocumento   = data_Documento.TipoDocumento,
                TramaXmlFirmado = tramaXmlFirmado
            };

            return(enviarDocumentoRequest);
        }
        public string PostResumen(List <Data_Documentos> data_Documentos)
        {
            string mensajeRespuesta = string.Empty;

            try
            {
                GenerarResumenDiario generarResumenDiario = new GenerarResumenDiario();
                ResumenDiario        resumenDiario        = generarResumenDiario.Data(data_Documentos);
                DocumentoResponse    response             = generarResumenDiario.Post(resumenDiario);

                if (!response.Exito)
                {
                    Data_Log data_Log = new Data_Log()
                    {
                        DetalleError   = response.MensajeError,
                        Comentario     = $"El XML con identificador: {resumenDiario.IdDocumento} no se pudo generar",
                        IdUser_Empresa = data_Usuario.IdUser_Empresa
                    };
                    data_Log.Create_Log();
                }
                else
                {
                    string rutaArchivo = Path.Combine(data_Documentos[0].Ruta, $"{resumenDiario.IdDocumento}.xml");

                    Firmar          firmar          = new Firmar();
                    FirmadoRequest  firmadoRequest  = firmar.Data(data_Usuario.IdAccesosSunat, response.TramaXmlSinFirma);
                    FirmadoResponse firmadoResponse = firmar.Post(firmadoRequest, true); //  Ya se obtuvo el documento firmado

                    if (firmadoResponse.Exito)                                           //  Comprobamos que se haya firmado de forma correcta
                    {
                        EnviarSunat            enviarSunat            = new EnviarSunat();
                        EnviarDocumentoRequest enviarDocumentoRequest = enviarSunat.Data(firmadoResponse.TramaXmlFirmado, data_Documentos[0], GetURL("03"));
                        string nombreZip = $"{resumenDiario.Emisor.NroDocumento}-{resumenDiario.IdDocumento}";
                        EnviarResumenResponse enviarResumenResponse = enviarSunat.Post_Figurativo(enviarDocumentoRequest, nombreZip);

                        if (enviarResumenResponse.Exito)    // Comprobar envío a sunat
                        {
                            ConsultaConstanciaRequest consultaConstanciaRequest = new ConsultaConstanciaRequest()
                            {
                                Ruc         = enviarDocumentoRequest.Ruc,
                                UsuarioSol  = enviarDocumentoRequest.UsuarioSol,
                                ClaveSol    = enviarDocumentoRequest.ClaveSol,
                                EndPointUrl = " https://e-factura.sunat.gob.pe/ol-it-wsconscpegem/billConsultService"
                            };
                            Consultar consultar = new Consultar();
                            EnviarDocumentoResponse enviarDocumentoResponse = consultar.Post_Constancia(consultaConstanciaRequest);
                            if (enviarDocumentoResponse.Exito)
                            {
                                mensajeRespuesta = $"El resumen diario ha realizado con éxito, detalle: {enviarDocumentoResponse.MensajeRespuesta}";
                            }
                            else
                            {
                                mensajeRespuesta = "El resumen diario ha realizado con éxito, pero hemos tenido inconvenietes al obtener" +
                                                   " el CDR del documento: " + resumenDiario.IdDocumento + ", probablemente se este empleado el usuario MODDATOS," +
                                                   "para obtener el CDR debes descargarlo de forma manual en la opción 'Consulta de CDR'";
                                data_Log = new Data_Log()
                                {
                                    DetalleError   = mensajeRespuesta,
                                    Comentario     = $"Ha ocurrido un error al generar el CDR del resumen diario: {resumenDiario.IdDocumento}, probablemente se este empleado MODDATOS",
                                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                                };
                                data_Log.Create_Log();
                            }

                            Data_DocumentoFigurativo data_DocumentoFigurativo = new Data_DocumentoFigurativo()
                            {
                                XMLFirmado          = firmadoResponse.TramaXmlFirmado,
                                Tipo                = "Resumen diario",
                                ComentarioDocumento = mensajeRespuesta,
                                Identificador       = resumenDiario.IdDocumento,
                                NumeroTicket        = enviarResumenResponse.NroTicket,
                                CdrSunat            = enviarDocumentoResponse.TramaZipCdr ?? string.Empty
                            };

                            if (!data_DocumentoFigurativo.Create_DocumentoFigurativo())
                            {
                                data_Log = new Data_Log()
                                {
                                    DetalleError   = "Error inesperado en la base de datos",
                                    Comentario     = "Ha ocurrido un error al guardar el registro del resumen diario",
                                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                                };
                                data_Log.Create_Log();
                            }
                            else
                            {
                                Data_DocumentoFigurativo dataUnion_DocumentoFigurativo;
                                Data_Documentos          updateDocumento;
                                foreach (var data_Documento in data_Documentos)
                                {
                                    dataUnion_DocumentoFigurativo = new Data_DocumentoFigurativo()
                                    {
                                        IdDocumentoFigurativo = data_DocumentoFigurativo.SCOPE_IDENTITY_VALUE,
                                        IdDocumento           = data_Documento.IdDocumento
                                    };
                                    if (!dataUnion_DocumentoFigurativo.Create_Figurativo_Documentos())
                                    {
                                        data_Log = new Data_Log()
                                        {
                                            DetalleError = $"Detalle de tablas: Documentos {data_Documento.IdDocumento},{data_Documento.SerieCorrelativo} con la " +
                                                           $"tabla Figurativo_Documentos {data_DocumentoFigurativo.SCOPE_IDENTITY_VALUE}, {data_DocumentoFigurativo.Identificador} ",
                                            Comentario     = "Ha ocurrido un error al guardar el registro del resumen diario, en la tabla de unión",
                                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                                        };
                                        data_Log.Create_Log();
                                    }

                                    updateDocumento = new Data_Documentos()
                                    {
                                        IdDocumento         = data_Documento.IdDocumento,
                                        EnviadoSunat        = true,
                                        EstadoSunat         = "Aceptado",
                                        ComentarioDocumento = $"El documento figura dentro del resumen diario con el código de identificación: {data_DocumentoFigurativo.Identificador}",
                                        ComunicacionBaja    = false,
                                    };
                                    if (!updateDocumento.Update_Documento())
                                    {
                                        data_Log = new Data_Log()
                                        {
                                            DetalleError   = $"No se ha podido actualizar el documento{data_Documento.IdDocumento}, {data_Documento.SerieCorrelativo} para indicar que resumen diario",
                                            Comentario     = "Error en la base de datos",
                                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                                        };
                                        data_Log.Create_Log();
                                    }
                                }
                            }
                        }
                        else
                        {
                            mensajeRespuesta = enviarResumenResponse.MensajeError;
                            data_Log         = new Data_Log()
                            {
                                DetalleError   = enviarResumenResponse.MensajeError,
                                Comentario     = "Error al crear resumen diario",
                                IdUser_Empresa = data_Usuario.IdUser_Empresa
                            };
                            data_Log.Create_Log();
                        }
                    }
                    else
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError = response.MensajeError, Comentario = "Error al firmar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }
                }
            }
            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 procesar el envío del documento",
                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                };
                data_Log.Create_Log();
                mensajeRespuesta = $"Detalle del error: {msg}";
            }
            return(mensajeRespuesta);
        }
        public void Post(Data_Documentos IE_IdDocumento)    // Ejecución
        {
            try
            {
                string          IdDocumento    = IE_IdDocumento.IdDocumento;
                Data_Documentos data_Documento = new Data_Documentos(IdDocumento);      //  IdDocumento variable global
                data_Documento.Read_Documento();

                GenerarFactura     generarFactura     = new GenerarFactura();
                GenerarNotaCredito generarNotaCredito = new GenerarNotaCredito();
                GenerarNotaDebito  generarNotaDebito  = new GenerarNotaDebito();

                DocumentoElectronico documento;
                DocumentoResponse    response;

                switch (data_Documento.TipoDocumento)
                {
                case "01":      //  Factura y boletas
                    documento = generarFactura.Data(data_Documento);
                    response  = generarFactura.Post(documento, true);
                    break;

                case "07":      //  Nota de crédito
                    documento = generarNotaCredito.data(data_Documento);
                    response  = generarNotaCredito.Post(documento, true);
                    break;

                case "08":      //  Nota de Débito
                    documento = generarNotaDebito.data(data_Documento);
                    response  = generarNotaDebito.Post(documento, true);
                    break;

                default:
                    documento = generarFactura.Data(data_Documento);
                    response  = generarFactura.Post(documento, true);
                    break;
                }

                if (!response.Exito)
                {
                    Data_Log data_Log = new Data_Log()
                    {
                        DetalleError   = response.MensajeError,
                        Comentario     = $"El XML con serie correlativo: {documento.SerieCorrelativo} no se pudo generar",
                        IdUser_Empresa = data_Usuario.IdUser_Empresa
                    };
                    data_Log.Create_Log();
                }

                string rutaArchivo = Path.Combine(data_Documento.Ruta, $"{documento.SerieCorrelativo}.xml");

                Firmar firmar = new Firmar();

                FirmadoRequest firmadoRequest = firmar.Data(data_Usuario.IdAccesosSunat, response.TramaXmlSinFirma);
                //FirmadoResponse firmadoResponse =   await firmar.Post(firmadoRequest);      //  Ya se obtuvo el documento firmado
                FirmadoResponse firmadoResponse = firmar.Post(firmadoRequest, true); //  Ya se obtuvo el documento firmado

                if (firmadoResponse.Exito)                                           //  Comprobamos que se haya firmado de forma correcta
                {
                    Data_Documentos actualizacionXML = new Data_Documentos(IdDocumento)
                    {
                        XmlFirmado = firmadoResponse.TramaXmlFirmado
                    };
                    if (!actualizacionXML.Update_Documento_OneColumn("[dbo].[Update_Documento_SignedXML]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al actualizar el xmlFirmado del documento",
                            Comentario     = "Error con la base de datos",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }
                }
                else
                {
                    data_Log = new Data_Log()
                    {
                        DetalleError = response.MensajeError, Comentario = "Error al firmar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa
                    };
                    data_Log.Create_Log();
                }

                EnviarSunat enviarSunat = new EnviarSunat();

                EnviarDocumentoRequest enviarDocumentoRequest = enviarSunat.Data(firmadoResponse.TramaXmlFirmado, data_Documento,
                                                                                 GetURL(data_Documento.TipoDocumento)); // Obtenemos los datos para EnviarDocumentoRequest

                //EnviarDocumentoResponse enviarDocumentoResponse =   await enviarSunat.Post_Documento(enviarDocumentoRequest);
                EnviarDocumentoResponse enviarDocumentoResponse = enviarSunat.Post_Documento(enviarDocumentoRequest, true);

                if (enviarDocumentoResponse.Exito && !string.IsNullOrEmpty(enviarDocumentoResponse.TramaZipCdr))    // Comprobar envío a sunat
                {
                    Data_Documentos actualizacionCDR = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, CdrSunat = enviarDocumentoResponse.TramaZipCdr
                    };
                    if (!actualizacionCDR.Update_Documento_OneColumn("[dbo].[Update_Documento_CDR]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al actualizar el CDR del documento",
                            Comentario     = "Error con la base de datos: [dbo].[Update_Documento_CDR]",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }

                    Data_Documentos actualizacionComentario = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, ComentarioDocumento = enviarDocumentoResponse.MensajeRespuesta
                    };
                    if (!actualizacionComentario.Update_Documento_OneColumn("[dbo].[Update_Documento_Comentario]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al guardar el comentario notificando la recepción del CDR del documento",
                            Comentario     = "No se pudo guardar el CDR",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }

                    Data_Documentos actualizacionEstadoSunat = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, EstadoSunat = "Aceptado"
                    };
                    if (!actualizacionEstadoSunat.Update_Documento_OneColumn("[dbo].[Update_Documento_EstadoSunat]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al guardar el comentario notificando el estado del documento",
                            Comentario     = "No se pudo guardar el estado del documento",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }
                }
                else
                {
                    data_Log = new Data_Log()
                    {
                        DetalleError = enviarDocumentoResponse.MensajeError, Comentario = "Error al enviar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa
                    };
                    data_Log.Create_Log();

                    Data_Documentos actualizacionComentario = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, ComentarioDocumento = enviarDocumentoResponse.MensajeError
                    };
                    if (!actualizacionComentario.Update_Documento_OneColumn("[dbo].[Update_Documento_Comentario]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al guardar el comentario notificando el error al no poder recibir  el CDR del documento",
                            Comentario     = "No se recibió el CDR",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }

                    Data_Documentos actualizacionEstadoSunat = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, EstadoSunat = "Rechazado"
                    };
                    if (!actualizacionEstadoSunat.Update_Documento_OneColumn("[dbo].[Update_Documento_EstadoSunat]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al guardar el comentario notificando el estado del documento",
                            Comentario     = "No se pudo guardar el estado del documento",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }
                }
            }
            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 procesar el envío del documento",
                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                };
                data_Log.Create_Log();
            }
        }
Example #10
0
        private async void btnEjecutar_ConInterfaces_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                Data_Documentos data_Documento = new Data_Documentos("20186C16-C1DC-4717-8F46-407447D225BC");
                data_Documento.Read_Documento();

                GenerarFactura generarFactura = new GenerarFactura();

                DocumentoElectronico documento = generarFactura.data(data_Documento);       //  CAMBIAR A ASINCRONO AL FINALIZAR EL DESARROLLO
                var response = await generarFactura.Post(documento);

                if (!response.Exito)
                {
                    System.Windows.MessageBox.Show($"A ocurrido un error en la generación de XML: {response.MensajeError}");
                }

                string rutaArchivo = Path.Combine(data_Documento.Ruta, $"{documento.SerieCorrelativo}.xml");

                Firmar firmar = new Firmar();

                FirmadoRequest  firmadoRequest  = firmar.Data(data_Documento.IdEmisor, response.TramaXmlSinFirma);
                FirmadoResponse firmadoResponse = await firmar.Post(firmadoRequest); //  Ya se obtuvo el documento firmado

                if (firmadoResponse.Exito)                                           //  Comprobamos que se haya firmado de forma correcta
                {
                    File.WriteAllBytes(rutaArchivo, Convert.FromBase64String(firmadoResponse.TramaXmlFirmado));
                }
                else
                {
                    System.Windows.MessageBox.Show($"A ocurrido un error al firmar el XML: {response.MensajeError}");
                }

                EnviarSunat enviarSunat = new EnviarSunat();

                EnviarDocumentoRequest enviarDocumentoRequest = enviarSunat.Data(firmadoResponse.TramaXmlFirmado, data_Documento,
                                                                                 "urlsunat"); // Obtenemos los datos para EnviarDocumentoRequest

                EnviarDocumentoResponse enviarDocumentoResponse = await enviarSunat.Post_Documento(enviarDocumentoRequest);

                //  enviarDocumentoResponse =   jsonEnvioDocumento  ;   respuestaComunConArchivo    =   respuestaEnvio

                System.Windows.MessageBox.Show(enviarDocumentoResponse.MensajeRespuesta);                        //  Temporal para pruebas

                if (enviarDocumentoResponse.Exito && !string.IsNullOrEmpty(enviarDocumentoResponse.TramaZipCdr)) // Comprobar envío a sunat
                {
                    if (!Directory.Exists($"{data_Documento.Ruta}\\{enviarDocumentoResponse.NombreArchivo}"))
                    {
                        Directory.CreateDirectory($"{data_Documento.Ruta}\\{enviarDocumentoResponse.NombreArchivo}");
                    }

                    File.WriteAllBytes($"{data_Documento.Ruta}\\{enviarDocumentoResponse.NombreArchivo}\\{enviarDocumentoResponse.NombreArchivo}.xml",
                                       Convert.FromBase64String(firmadoResponse.TramaXmlFirmado));

                    if (!Directory.Exists($"{data_Documento.Ruta}\\{enviarDocumentoResponse.NombreArchivo}\\CDR"))
                    {
                        Directory.CreateDirectory($"{data_Documento.Ruta}\\{enviarDocumentoResponse.NombreArchivo}\\CDR");
                    }

                    File.WriteAllBytes($"{data_Documento.Ruta}\\{enviarDocumentoResponse.NombreArchivo}\\CDR\\R-{enviarDocumentoResponse.NombreArchivo}.zip",
                                       Convert.FromBase64String(enviarDocumentoResponse.TramaZipCdr));
                }
            }
            catch (Exception ex)
            {
                System.Windows.MessageBox.Show($"A ocurrido un error: {ex}");
            }
        }
Example #11
0
        /// <summary>
        /// IMPORTANTE
        /// Este método obtiene todos los datos  del documento electrónico, por el momento esta como sincrono para testing pero en producción se pondrá como asíncrono
        /// </summary>
        /// <param name="data_Documento"></param>
        /// <returns></returns>
        public DocumentoElectronico data(Data_Documentos data_Documento)
        {
            DocumentoElectronico documento;

            try
            {
                Data_CabeceraDocumento cabeceraDocumento = new Data_CabeceraDocumento(data_Documento.IdCabeceraDocumento);
                cabeceraDocumento.Read_CabeceraDocumento();

                documento = new DocumentoElectronico()       //  Documento principal
                {
                    SerieCorrelativo  = data_Documento.SerieCorrelativo,
                    TipoDocumento     = data_Documento.TipoDocumento ?? string.Empty,
                    FechaEmision      = cabeceraDocumento.FechaEmision,
                    HoraEmision       = cabeceraDocumento.HoraEmision,
                    FechaVencimiento  = cabeceraDocumento.FechaVencimiento,
                    OrdenCompra       = cabeceraDocumento.OrdenCompra,
                    Moneda            = cabeceraDocumento.Moneda,
                    TipoOperacion     = cabeceraDocumento.TipoOperacion,
                    MontoEnLetras     = cabeceraDocumento.MontoEnLetras ?? string.Empty,
                    CantidadItems     = cabeceraDocumento.CantidadItems,
                    TotalValorVenta   = cabeceraDocumento.TotalValorVenta,
                    TotalPrecioVenta  = cabeceraDocumento.TotalPrecioVenta,
                    TotalDescuento    = cabeceraDocumento.TotalDescuento,
                    TotalOtrosCargos  = cabeceraDocumento.TotalOtrosCargos,
                    TotalAnticipos    = cabeceraDocumento.TotalAnticipos,
                    ImporteTotalVenta = cabeceraDocumento.ImporteTotalVenta
                };

                #region Emisor
                Data_Contribuyente Emisor = new Data_Contribuyente(data_Documento.IdEmisor);
                Emisor.Read_Contribuyente();
                documento.Emisor = Emisor;
                #endregion Emisor

                #region Receptor
                Data_Contribuyente Receptor = new Data_Contribuyente(cabeceraDocumento.IdReceptor);
                Receptor.Read_Contribuyente();
                documento.Receptor = Receptor;
                documento.Receptor.OtrosParticipantes = new List <Contribuyente>();  //  Pendiente crear entidad OtrosParticipantes
                #endregion Receptor

                #region documentoDetalle
                Data_DocumentoDetalle   data_DocumentoDetalle = new Data_DocumentoDetalle(data_Documento.IdCabeceraDocumento);
                List <DetalleDocumento> detalleDocumentos     = data_DocumentoDetalle.Read_DocumentoDetalle();

                if (detalleDocumentos.Count > 0)    //  Validar en caso de que no haya detalles del documento
                {
                    foreach (var detalleDocumento in detalleDocumentos)
                    {
                        #region lineaTotalImpuesto
                        Data_TotalImpuesto   lineaTotalImpuesto  = new Data_TotalImpuesto(detalleDocumento.IdDocumentoDetalle);
                        List <TotalImpuesto> lineaTotalImpuestos = lineaTotalImpuesto.Read_TotalImpuestos(2);   //  El parámetro -> 2 <- es indicativo de que es por cada línea

                        foreach (var st_totalImpuesto in lineaTotalImpuestos)
                        {
                            Data_SubTotalImpuesto    data_SubTotalImpuesto = new Data_SubTotalImpuesto(st_totalImpuesto.IdTotalImpuestos);
                            List <SubTotalImpuestos> subTotalImpuestos     = data_SubTotalImpuesto.Read_SubTotalImpuesto();
                            st_totalImpuesto.SubTotalesImpuestos = subTotalImpuestos;
                        }
                        detalleDocumento.TotalImpuestos = lineaTotalImpuestos;
                        #endregion lineaTotalImpuesto

                        #region Notas
                        Data_Nota   lineaData_Nota = new Data_Nota(detalleDocumento.IdDocumentoDetalle);     // Parámetro es el id de cabecera de documento
                        List <Nota> lineaNotas     = lineaData_Nota.Read(2);
                        detalleDocumento.Notas = lineaNotas;
                        #endregion Notas

                        #region Descripciones
                        List <Descripcion> descripciones = data_DocumentoDetalle.Read_Descripcion(detalleDocumento.IdDocumentoDetalle);
                        detalleDocumento.Descripciones = descripciones;
                        #endregion Descripciones

                        #region PrecioAlternativo
                        Data_PrecioAlternativo   data_PrecioAlternativo = new Data_PrecioAlternativo(detalleDocumento.IdDocumentoDetalle);
                        List <PrecioAlternativo> precioAlternativos     = data_PrecioAlternativo.Read_PrecioAlternativo();
                        detalleDocumento.PreciosAlternativos = precioAlternativos;
                        #endregion PrecioAlternativo

                        #region emergency
                        List <Descuento> descuentos = new List <Descuento>();

                        detalleDocumento.Descuentos = descuentos;

                        List <PropiedadAdicional> propiedadAdicionales = new List <PropiedadAdicional>();
                        detalleDocumento.PropiedadesAdicionales = propiedadAdicionales;

                        List <Entrega> entregas1 = new List <Entrega>();

                        Entrega data_entrega;
                        data_entrega = new Entrega()
                        {
                            Cantidad       = 0,
                            MaximaCantidad = 0,
                            Envio          = new Envio(),
                        };
                        entregas1.Add(data_entrega);

                        detalleDocumento.Entregas = entregas1;
                        #endregion emergency
                    }
                    documento.DetalleDocumentos = detalleDocumentos;
                }


                #endregion documentoDetalle

                #region TotalImpuestos
                Data_TotalImpuesto   data_TotalImpuesto = new Data_TotalImpuesto(data_Documento.IdCabeceraDocumento);
                List <TotalImpuesto> totalImpuestos     = data_TotalImpuesto.Read_TotalImpuestos(1);     //  El parámetro -> 1 <- es indicativo de que es por cada línea

                foreach (var st_totalImpuesto in totalImpuestos)
                {
                    Data_SubTotalImpuesto    data_SubTotalImpuesto = new Data_SubTotalImpuesto(st_totalImpuesto.IdTotalImpuestos);
                    List <SubTotalImpuestos> subTotalImpuestos     = data_SubTotalImpuesto.Read_SubTotalImpuesto();
                    st_totalImpuesto.SubTotalesImpuestos = subTotalImpuestos;
                }
                documento.TotalImpuestos = totalImpuestos;
                #endregion TotalImpuestos

                #region Notas
                Data_Nota   data_Nota = new Data_Nota(data_Documento.IdCabeceraDocumento);  // Parámetro es el id de cabecera de documento
                List <Nota> notas     = data_Nota.Read(1);
                documento.Notas = notas;
                #endregion Notas

                #region TerminosEntregas
                Data_TerminosEntrega data_TerminosEntrega = new Data_TerminosEntrega(data_Documento.IdCabeceraDocumento);
                data_TerminosEntrega.Read_TerminosEntrega();   //  El parámetro -> 1 <- es indicativo de que es por cada línea
                documento.TerminosEntrega = data_TerminosEntrega;
                #endregion TerminosEntregas

                #region Anticipos
                Data_Anticipo   anticipo  = new Data_Anticipo(data_Documento.IdCabeceraDocumento);
                List <Anticipo> anticipos = anticipo.Read_Anticipo();
                documento.Anticipos = anticipos;
                #endregion Anticipos

                List <PeriodoFactura>       periodoFacturas             = null;
                List <DocumentoRelacionado> documentoRelacionados       = null;
                List <DocumentoRelacionado> otrosDocumentosRelacionados = null;
                List <Entrega>   entregas   = null;
                List <MedioPago> medioPagos = null;

                List <Descuento> item_descuentos = null;

                documento.Relacionados = documentoRelacionados;
                documento.OtrosDocumentosRelacionados = otrosDocumentosRelacionados;
                documento.Entregas        = entregas;
                documento.MedioPagos      = medioPagos;
                documento.Descuentos      = item_descuentos;
                documento.PeriodosFactura = periodoFacturas;
            }
            catch (Exception ex)
            {
                documento = new DocumentoElectronico();
            }

            return(documento);
        }
        private async void btnEnviar_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                int cantidadAceptados = 0;
                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);
                    }
                }

                foreach (var selected_data_Documento in selected_data_Documentos)
                {
                    if (selected_data_Documento.EnviadoSunat == true)
                    {
                        cantidadAceptados++;
                    }
                }

                if (selected_data_Documentos.Count() > 0)
                {
                    string enviados     = string.Empty;
                    string noEnviados   = string.Empty;
                    string mensajeFinal = string.Empty;

                    if (cantidadAceptados == 0)
                    {
                        ProgressDialogResult result = ProgressWindow.Execute(padre, "Procesando...", () =>
                        {
                            ProcesarEnvio procesarEnvio = new ProcesarEnvio(data_Usuario);
                            IEnumerable <Data_Documentos> documentosProcesar = selected_data_Documentos.AsEnumerable();
                            Parallel.ForEach(documentosProcesar, (data_Documento) => procesarEnvio.Post(data_Documento));
                        });

                        List <Data_Documentos> selected_data_Documentos_updated = new List <Data_Documentos>();
                        Data_Documentos        documentoUpdated;

                        foreach (var data_Documento in data_Documentos)
                        {
                            if (data_Documento.Selectable == true)
                            {
                                documentoUpdated = new Data_Documentos(data_Documento.IdDocumento);
                                documentoUpdated.Read_Documento();
                                selected_data_Documentos_updated.Add(documentoUpdated);
                            }
                        }

                        foreach (var selected_data_Documento in selected_data_Documentos_updated)
                        {
                            if (selected_data_Documento.EnviadoSunat == true)
                            {
                                enviados += $", {selected_data_Documento.SerieCorrelativo}";
                            }
                            else
                            {
                                noEnviados += $", {selected_data_Documento.SerieCorrelativo}";
                            }
                        }

                        if (string.IsNullOrEmpty(enviados)) //  Ningún enviado, puros rechazados como voz
                        {
                            mensajeFinal = $"No se pudo enviar ningún documento, los documentos rechazados son:\n {noEnviados}";
                        }

                        if (!string.IsNullOrEmpty(enviados) && string.IsNullOrEmpty(noEnviados))    //  Sin ningún documento rechazado
                        {
                            mensajeFinal = $"Se ha enviado a Sunat el(los) documento(s):\n {enviados}";
                        }

                        if (!string.IsNullOrEmpty(enviados) && !string.IsNullOrEmpty(noEnviados))   //  Con al menos un documento rechazado
                        {
                            mensajeFinal = $"Se ha enviado a Sunat el(los) documento(s):\n {enviados} y se han rechazado los siguientes documentos:\n {noEnviados}";
                        }

                        LoadGrid();

                        CustomDialogWindow customDialogWindow = new CustomDialogWindow();
                        customDialogWindow.Buttons            = CustomDialogButtons.OK;
                        customDialogWindow.Caption            = "Mensaje";
                        customDialogWindow.DefaultButton      = CustomDialogResults.OK;
                        customDialogWindow.InstructionHeading = "Resultados del envío a Sunat";
                        customDialogWindow.InstructionIcon    = CustomDialogIcons.Information;
                        customDialogWindow.InstructionText    = mensajeFinal;
                        CustomDialogResults customDialogResults = customDialogWindow.Show();
                    }
                    else
                    {
                        System.Windows.Forms.MessageBox.Show("Estimado usuario, está intentando enviar a Sunat uno o varios documentos que ya fueron aceptados, " +
                                                             "sí desea revisar estos documento(s) selecciónelo y pulse descargar.", "Acción no permitida", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                }
                else
                {
                    System.Windows.Forms.MessageBox.Show("Debe seleccionar al menos un documento", "Ninguna selección detectada", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            catch (Exception ex)
            {
                var msg = string.Concat(ex.InnerException?.Message, ex.Message);
                System.Windows.MessageBox.Show(msg, "Error al enviar el documento a sunat", MessageBoxButton.OK, MessageBoxImage.Error);
                data_Log = new Data_Log()
                {
                    DetalleError   = $"Detalle del error: {msg}",
                    Comentario     = "Error al enviar el documento a sunat desde la interfaz",
                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                };
                data_Log.Create_Log();
            }
        }
Example #13
0
        public async void Post(Data_Documentos IE_IdDocumento)
        {
            //var task = Task.Factory.StartNew(async () =>
            //{
            try
            {
                string IdDocumento = IE_IdDocumento.IdDocumento;

                // var taskfactory etc etc pero para despues "20186C16-C1DC-4717-8F46-407447D225BC"
                Data_Documentos data_Documento = new Data_Documentos(IdDocumento);          //  IdDocumento variable global
                data_Documento.Read_Documento();

                GenerarFactura generarFactura = new GenerarFactura();

                DocumentoElectronico documento = generarFactura.data(data_Documento);           //  CAMBIAR A ASINCRONO AL FINALIZAR EL DESARROLLO\

                var response = await generarFactura.Post(documento);                            //await

                if (!response.Exito)
                {
                    Data_Log data_Log = new Data_Log()
                    {
                        DetalleError   = response.MensajeError,
                        Comentario     = $"El XML con serie correlativo: {documento.SerieCorrelativo} no se pudo generar",
                        IdUser_Empresa = data_Usuario.IdUser_Empresa
                    };
                    data_Log.Create_Log();
                }

                string rutaArchivo = Path.Combine(data_Documento.Ruta, $"{documento.SerieCorrelativo}.xml");

                Firmar firmar = new Firmar();

                FirmadoRequest  firmadoRequest  = firmar.Data(data_Documento.IdEmisor, response.TramaXmlSinFirma);
                FirmadoResponse firmadoResponse = await firmar.Post(firmadoRequest); //  Ya se obtuvo el documento firmado

                if (firmadoResponse.Exito)                                           //  Comprobamos que se haya firmado de forma correcta
                {
                    Data_Documentos actualizacionXML = new Data_Documentos(IdDocumento)
                    {
                        XmlFirmado = firmadoResponse.TramaXmlFirmado
                    };
                    if (!actualizacionXML.Update_Documento_OneColumn("[dbo].[Update_Documento_SignedXML]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al actualizar el xmlFirmado del documento",
                            Comentario     = "Error con la base de datos",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }
                }
                else
                {
                    data_Log = new Data_Log()
                    {
                        DetalleError = response.MensajeError, Comentario = "Error al firmar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa
                    };
                    data_Log.Create_Log();
                }

                EnviarSunat enviarSunat = new EnviarSunat();

                EnviarDocumentoRequest enviarDocumentoRequest = enviarSunat.Data(firmadoResponse.TramaXmlFirmado, data_Documento,
                                                                                 GetURL(data_Documento.TipoDocumento)); // Obtenemos los datos para EnviarDocumentoRequest

                EnviarDocumentoResponse enviarDocumentoResponse = await enviarSunat.Post_Documento(enviarDocumentoRequest);

                if (enviarDocumentoResponse.Exito && !string.IsNullOrEmpty(enviarDocumentoResponse.TramaZipCdr))        // Comprobar envío a sunat
                {
                    Data_Documentos actualizacionCDR = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, CdrSunat = enviarDocumentoResponse.TramaZipCdr
                    };
                    if (!actualizacionCDR.Update_Documento_OneColumn("[dbo].[Update_Documento_CDR]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al actualizar el CDR del documento",
                            Comentario     = "Error con la base de datos: [dbo].[Update_Documento_CDR]",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }

                    Data_Documentos actualizacionComentario = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, ComentarioDocumento = enviarDocumentoResponse.MensajeRespuesta
                    };
                    if (!actualizacionComentario.Update_Documento_OneColumn("[dbo].[Update_Documento_Comentario]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al guardar el comentario notificando la recepción del CDR del documento",
                            Comentario     = "No se pudo guardar el CDR",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }

                    Data_Documentos actualizacionEstadoSunat = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, EstadoSunat = "Aceptado"
                    };
                    if (!actualizacionEstadoSunat.Update_Documento_OneColumn("[dbo].[Update_Documento_EstadoSunat]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al guardar el comentario notificando el estado del documento",
                            Comentario     = "No se pudo guardar el estado del documento",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }
                }
                else
                {
                    data_Log = new Data_Log()
                    {
                        DetalleError = enviarDocumentoResponse.MensajeError, Comentario = "Error al enviar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa
                    };
                    data_Log.Create_Log();

                    Data_Documentos actualizacionComentario = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, ComentarioDocumento = enviarDocumentoResponse.MensajeError
                    };
                    if (!actualizacionComentario.Update_Documento_OneColumn("[dbo].[Update_Documento_Comentario]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al guardar el comentario notificando el error al no poder recibir  el CDR del documento",
                            Comentario     = "No se recibió el CDR",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }

                    Data_Documentos actualizacionEstadoSunat = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, EstadoSunat = "Rechazado"
                    };
                    if (!actualizacionEstadoSunat.Update_Documento_OneColumn("[dbo].[Update_Documento_EstadoSunat]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al guardar el comentario notificando el estado del documento",
                            Comentario     = "No se pudo guardar el estado del documento",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }
                }
            }
            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 procesar el envío del documento",
                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                };
                data_Log.Create_Log();
            }
            //});
            //return task;
        }