public FirmadoResponse Post([FromBody] FirmadoRequest request)
        {
            var response = new FirmadoResponse();

            try
            {
                var serializador = new Serializador
                {
                    RutaCertificadoDigital = request.CertificadoDigital,
                    PasswordCertificado    = request.PasswordCertificado,
                    TipoDocumento          = request.UnSoloNodoExtension ? 0 : 1
                };

                response.TramaXmlFirmado = serializador.FirmarXml(request.TramaXmlSinFirma);
                response.ResumenFirma    = serializador.DigestValue;
                response.ValorFirma      = serializador.ValorFirma;
                response.Exito           = true;
            }
            catch (Exception ex)
            {
                response.MensajeError = ex.Message;
                response.Pila         = ex.StackTrace;
                response.Exito        = false;
            }

            return(response);
        }
        public async Task <EnviarResumenResponse> Generar(string organization, ComunicacionBaja model)
        {
            EmpresaModel empresa = await _repositoryempresa.Get(organization);

            model.IdDocumento     = string.Format("RA-{0:yyyyMMdd}-001", DateTime.Today);
            model.FechaEmision    = DateTime.Today.ToString(FormatoFecha);
            model.FechaReferencia = DateTime.Today.AddDays(-1).ToString(FormatoFecha);
            model.Emisor          = HelperTo.ToEmisor(empresa);

            IEstructuraXml summary     = _documentoXml.Generar(model);
            string         XmlSinFirma = await _serializador.GenerarXml(summary);

            CertificadoDigitalModel certificado = await _repositorycert.GetCertificate(organization);

            FirmadoRequest  firmado       = HelperTo.ToSignedModel(certificado, XmlSinFirma, true);
            FirmadoResponse responseFirma = await _certificador.FirmarXml(firmado);

            ParametroEmpresaModel parametro = await _repositoryparam.GetConfiguration(certificado.Empresa);

            EnviarDocumentoRequest request = HelperTo.ToSendVoidedDocument(model, parametro, responseFirma);

            File.WriteAllBytes("voided.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado));

            EnviarResumenResponse response = new EnviarResumenResponse();
            var nombreArchivo = $"{request.Ruc}-{request.IdDocumento}";
            var tramaZip      = await _serializador.GenerarZip(request.TramaXmlFirmado, nombreArchivo);

            _servicioSunatDocumentos.Inicializar(new ParametrosConexion
            {
                Ruc         = request.Ruc,
                UserName    = request.UsuarioSol,
                Password    = request.ClaveSol,
                EndPointUrl = request.EndPointUrl
            });

            RespuestaAsincrono resultado = _servicioSunatDocumentos.EnviarResumen(new DocumentoSunat
            {
                NombreArchivo = $"{nombreArchivo}.zip",
                TramaXml      = tramaZip
            });

            if (resultado.Exito)
            {
                response.NroTicket     = resultado.NumeroTicket;
                response.Exito         = true;
                response.NombreArchivo = nombreArchivo;
            }
            else
            {
                response.MensajeError = resultado.MensajeError;
                response.Exito        = false;
            }
            //guardar la respuesta
            return(response);
        }
예제 #3
0
        public async Task <EnviarDocumentoResponse> Generar(string organization, DocumentoElectronico model)
        {
            EmpresaModel empresa = await _repositoryempresa.Get(organization);

            model.Emisor = HelperTo.ToEmisor(empresa);
            IEstructuraXml invoice     = _documentoXml.Generar(model);
            string         XmlSinFirma = await _serializador.GenerarXml(invoice);

            CertificadoDigitalModel certificado = await _repositorycert.GetCertificate(organization);

            FirmadoRequest  firmado       = HelperTo.ToSignedModel(certificado, XmlSinFirma, false);
            FirmadoResponse responseFirma = await _certificador.FirmarXml(firmado);

            ParametroEmpresaModel parametro = await _repositoryparam.GetConfiguration(certificado.Empresa);

            EnviarDocumentoRequest request = HelperTo.ToSendDocument(model, parametro, responseFirma);

            File.WriteAllBytes("invoice.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado));

            EnviarDocumentoResponse response = new EnviarDocumentoResponse();
            var nombreArchivo = $"{request.Ruc}-{request.TipoDocumento}-{request.IdDocumento}";
            var tramaZip      = await _serializador.GenerarZip(request.TramaXmlFirmado, nombreArchivo);

            _servicioSunatDocumentos.Inicializar(new ParametrosConexion
            {
                Ruc         = request.Ruc,
                UserName    = request.UsuarioSol,
                Password    = request.ClaveSol,
                EndPointUrl = request.EndPointUrl
            });

            RespuestaSincrono resultado = _servicioSunatDocumentos.EnviarDocumento(new DocumentoSunat
            {
                TramaXml      = tramaZip,
                NombreArchivo = $"{nombreArchivo}.zip"
            });

            if (!resultado.Exito)
            {
                response.Exito        = false;
                response.MensajeError = resultado.MensajeError;
            }
            else
            {
                response = await _serializador.GenerarDocumentoRespuesta(resultado.ConstanciaDeRecepcion);

                File.WriteAllBytes("cdr_invoice.zip", Convert.FromBase64String(response.TramaZipCdr));
                // Quitamos la R y la extensión devueltas por el Servicio.
                response.NombreArchivo = nombreArchivo;
            }
            //guardar la respuesta
            return(response);
        }
예제 #4
0
        public FirmadoResponse Post(FirmadoRequest request, bool sincrono)
        {
            var response = new FirmadoResponse();

            try
            {
                response       = _certificador.FirmarXml(request, sincrono);
                response.Exito = true;
            }
            catch (Exception ex)
            {
                response.MensajeError = ex.Message;
                response.Pila         = ex.StackTrace;
                response.Exito        = false;
            }

            return(response);
        }
예제 #5
0
        public async Task <FirmadoResponse> Post([FromBody] FirmadoRequest request)
        {
            var response = new FirmadoResponse();

            try
            {
                response = await _certificador.FirmarXml(request);

                response.Exito = true;
            }
            catch (Exception ex)
            {
                response.MensajeError = ex.Message;
                response.Pila         = ex.StackTrace;
                response.Exito        = false;
            }

            return(response);
        }
        private void BtnFirmar_OnClick(object sender, RoutedEventArgs e)
        {
            TxtResultado.Text = "Firmando XML...";

            var resourceStream = Application.GetResourceStream(new Uri("certificado.pfx", UriKind.Relative));
            var arrayBytes     = new byte[resourceStream.Stream.Length];

            resourceStream.Stream.Read(arrayBytes, 0, arrayBytes.Length);
            var content = Convert.ToBase64String(arrayBytes);

            // Firmado del Documento.
            var firmado = new FirmadoRequest
            {
                TramaXmlSinFirma    = _documentoResponse.TramaXmlSinFirma,
                CertificadoDigital  = content,
                PasswordCertificado = string.Empty,
                UnSoloNodoExtension = false
            };

            var requestFirma = new RestRequest("Firmar", Method.POST)
            {
                RequestFormat = DataFormat.Json
            };

            requestFirma.AddBody(firmado);

            _client.ExecuteAsync <FirmadoResponse>(requestFirma, response =>
            {
                _responseFirma = response.Data;

                Dispatcher.BeginInvoke(() =>
                {
                    TxtResultado.Text = _responseFirma.Exito ?
                                        "XML Firmado" : _responseFirma.MensajeError;
                    BtnEnviar.IsEnabled = _responseFirma.Exito;
                });
            });
        }
예제 #7
0
        async Task <FirmadoResponse> ICertificador.FirmarXml(FirmadoRequest request)
        {
            var task = Task.Factory.StartNew(() =>
            {
                var response = new FirmadoResponse();

                var certificate = new X509Certificate2();
                certificate.Import(Convert.FromBase64String(request.CertificadoDigital), request.PasswordCertificado, X509KeyStorageFlags.MachineKeySet);

                var xmlDoc = new XmlDocument();

                string resultado;

                var betterBytes = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding(Formatos.EncodingIso),
                                                   Convert.FromBase64String(request.TramaXmlSinFirma));

                using (var documento = new MemoryStream(betterBytes))
                {
                    xmlDoc.PreserveWhitespace = false;
                    xmlDoc.Load(documento);

                    var indiceNodo = request.UnSoloNodoExtension ?   0   :   1;

                    var nodoExtension = xmlDoc.GetElementsByTagName("ExtensionContent", EspacioNombres.ext).Item(indiceNodo);

                    if (nodoExtension == null)
                    {
                        throw new InvalidOperationException("No se pudo encontrar el nodo ExtensionContent en el XML");
                    }
                    nodoExtension.RemoveAll();

                    // Creamos el objeto SignedXml.
                    var signedXml = new SignedXml(xmlDoc)
                    {
                        SigningKey = certificate.PrivateKey
                    };
                    var xmlSignature = signedXml.Signature;

                    var env = new XmlDsigEnvelopedSignatureTransform();

                    var reference = new Reference(string.Empty);
                    reference.AddTransform(env);
                    xmlSignature.SignedInfo.AddReference(reference);

                    var keyInfo  = new KeyInfo();
                    var x509Data = new KeyInfoX509Data(certificate);

                    x509Data.AddSubjectName(certificate.Subject);

                    keyInfo.AddClause(x509Data);
                    xmlSignature.KeyInfo = keyInfo;
                    xmlSignature.Id      = "SignatureSP";
                    signedXml.ComputeSignature();

                    // Recuperamos el valor Hash de la firma para este documento.
                    if (reference.DigestValue != null)
                    {
                        response.ResumenFirma = Convert.ToBase64String(reference.DigestValue);
                    }

                    response.ValorFirma = Convert.ToBase64String(signedXml.SignatureValue);

                    nodoExtension.AppendChild(signedXml.GetXml());

                    using (var memDoc = new MemoryStream())
                    {
                        using (var writer = XmlWriter.Create(memDoc, new XmlWriterSettings {
                            Encoding = Encoding.GetEncoding(Formatos.EncodingIso)
                        }))
                        {
                            xmlDoc.WriteTo(writer);
                        }
                        resultado = Convert.ToBase64String(memDoc.ToArray());
                    }
                }
                response.TramaXmlFirmado = resultado;

                return(response);
            });

            return(await task);
        }
예제 #8
0
        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);
        }
예제 #9
0
        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();
            }
        }
예제 #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}");
            }
        }
예제 #11
0
        public static EnviarDocumentoRequest ToSendPerceptionDocument(DocumentoPercepcion model, ParametroEmpresaModel parametro, FirmadoResponse responseFirma)
        {
            EnviarDocumentoRequest request = new EnviarDocumentoRequest();

            request.Ruc             = model.Emisor.NroDocumento;
            request.UsuarioSol      = parametro.UsuarioSol;
            request.ClaveSol        = parametro.ClaveSol;
            request.EndPointUrl     = "";
            request.IdDocumento     = model.IdDocumento;
            request.TipoDocumento   = "40";
            request.TramaXmlFirmado = responseFirma.TramaXmlFirmado;

            return(request);
        }
예제 #12
0
        public static EnviarDocumentoRequest ToSendSummaryDocument(ResumenDiarioNuevo model, ParametroEmpresaModel parametro, FirmadoResponse responseFirma)
        {
            EnviarDocumentoRequest request = new EnviarDocumentoRequest();

            request.Ruc         = model.Emisor.NroDocumento;
            request.UsuarioSol  = parametro.UsuarioSol;
            request.ClaveSol    = parametro.ClaveSol;
            request.EndPointUrl = "";
            request.IdDocumento = model.IdDocumento;
            //request.TipoDocumento = model.TipoDocumento;
            request.TramaXmlFirmado = responseFirma.TramaXmlFirmado;

            return(request);
        }
예제 #13
0
        private void btnImprimirVenta_Click(object sender, EventArgs e)
        {
            try
            {
                if (string.IsNullOrEmpty(this.txtIDCliente.Text))
                {
                    MessageBox.Show("Error: Debe seleccionar un cliente.");
                    return;
                }

                decimal ventaSoles = decimal.Parse((string.IsNullOrEmpty(this.txtVentaSoles.Text) ? "0.00" : this.txtVentaSoles.Text));
                decimal pagoSoles  = decimal.Parse((string.IsNullOrEmpty(this.txtPagoSoles.Text) ? "0.00" : this.txtPagoSoles.Text));

                if (ventaSoles > pagoSoles)
                {
                    MessageBox.Show("Monto pago es insuficiente.");
                }
                else
                {
                    var documento = new DocumentoElectronico
                    {
                        Emisor   = CrearEmisor(),
                        Receptor = new Contribuyente
                        {
                            NroDocumento  = "20100039207",
                            TipoDocumento = "6",
                            NombreLegal   = "RANSA COMERCIAL S.A.",
                            Email         = "*****@*****.**"
                        },
                        IdDocumento       = "",
                        FechaEmision      = dtpFechaHora.Value.ToShortDateString(),
                        Moneda            = "PEN",
                        MontoEnLetras     = enletras(txtVentaSoles.Text), //"SON CIENTO DIECIOCHO SOLES CON 0/100",
                        CalculoIgv        = 0.18m,
                        CalculoIsc        = 0.10m,
                        CalculoDetraccion = 0.04m,
                        TipoDocumento     = cboFacturaBoleta.SelectedValue.ToString(),
                        TotalIgv          = 18,
                        TotalVenta        = 118,
                        Gravadas          = 100
                    };

                    foreach (DataGridViewRow row in grvDetalleVenta.Rows)
                    {
                        documento.Items.Add(new DetalleDocumento
                        {
                            IdDocumento       = documento.IdDocumento, //+ i.ToString().PadLeft(8, char.Parse("0")),
                            Id                = row.Index + 1,
                            Cantidad          = decimal.Parse(row.Cells["Cantidad"].Value.ToString()),
                            PrecioReferencial = decimal.Parse(row.Cells["PUnit"].Value.ToString()),
                            PrecioUnitario    = decimal.Parse(row.Cells["PUnit"].Value.ToString()),
                            TipoPrecio        = "01",
                            CodigoItem        = row.Cells["CodProd"].Value.ToString(),
                            Descripcion       = row.Cells["Descripcion"].Value.ToString(),
                            UnidadMedida      = row.Cells["UnidMed"].Value.ToString(),
                            Impuesto          = 18,
                            TipoImpuesto      = (row.Cells["FlgAfectoIGV"].Value.ToString() == "1") ? "10" : "30",// Gravada
                            TotalVenta        = decimal.Parse(row.Cells["TotaItem"].Value.ToString()),
                            Suma              = decimal.Parse(row.Cells["TotaItem"].Value.ToString()),
                        });
                    }

                    FirmadoResponse response = FirmadoCPE.Generar(documento);

                    var resumentFirma = response.ResumenFirma;
                    var firma         = response.ValorFirma;
                    var mensajeError  = response.MensajeError;

                    BE_Comprobante pBE_ComprobanteTMP = new BE_Comprobante()
                    {
                        ID = 0,
                        Str_Tipo_Comprobante             = documento.TipoDocumento,
                        Str_Serie_Comprobante            = "",
                        Str_Numero_Comprobante           = "",
                        Str_Num_Documento_Cliente        = documento.Receptor.NroDocumento,
                        Str_Fecha_Hora_Comprobante       = documento.FechaEmision,
                        Str_Placa_Comprobante            = txtPlaca.Text,
                        Str_Linea_Cred_Soles_Comprobante = txtLineaCredSoles.Text,
                        Str_Cod_Operador = this.txtCodOperador.Text,
                        Str_Cod_Turno    = this.txtCodTurno.Text,
                        Str_Tarjeta_Soles_Comprobante = this.txtTarjetaSoles.Text,
                        Str_Linea_Cred_Comprobante    = this.txtUsarLineaCred.Text,
                        //Dec_Total_Gravado_Comprobante = decimal.Parse(txtSTGravado.Text),
                        Dec_Total_Gravado_Comprobante  = decimal.Parse((string.IsNullOrEmpty(this.txtSTGravado.Text) ? "0.00" : this.txtSTGravado.Text)),
                        Dec_Total_Gratuito_Comprobante = 0,
                        //Dec_Total_Inafecto_Comprobante = decimal.Parse(txtSTInafecto.Text),
                        Dec_Total_Inafecto_Comprobante  = decimal.Parse((string.IsNullOrEmpty(this.txtSTInafecto.Text) ? "0.00" : this.txtSTInafecto.Text)),
                        Dec_Total_Exonerado_Comprobante = 0,
                        Dec_Dscnto_Global_Comprobante   = 0,
                        //Dec_Total_Venta_Soles_Comprobante = decimal.Parse(txtVentaSoles.Text),
                        Dec_Total_Venta_Soles_Comprobante = decimal.Parse((string.IsNullOrEmpty(this.txtVentaSoles.Text) ? "0.00" : this.txtVentaSoles.Text)),
                        Dec_Total_Igv_Soles_Comprobante   = 0,
                        Dec_Total_Isc_Soles_Comprobante   = 0,
                        //Dec_Efectivo_Soles_Comprobante = decimal.Parse(txtEfectivoSoles.Text),
                        Dec_Efectivo_Soles_Comprobante = decimal.Parse((string.IsNullOrEmpty(this.txtEfectivoSoles.Text) ? "0.00" : this.txtEfectivoSoles.Text)),
                        //Dec_Tipo_Cambio_Comprobante = decimal.Parse(txtTipoCambio.Text),
                        Dec_Tipo_Cambio_Comprobante = decimal.Parse((string.IsNullOrEmpty(this.txtTipoCambio.Text) ? "0.00" : this.txtTipoCambio.Text)),
                        //Dec_Efectivo_Dolares_Comprobante = decimal.Parse(txtEfectivoDolares.Text),
                        Dec_Efectivo_Dolares_Comprobante = decimal.Parse((string.IsNullOrEmpty(this.txtEfectivoDolares.Text) ? "0.00" : this.txtEfectivoDolares.Text)),
                        //Dec_Pago_Comprobante = decimal.Parse(txtPagoSoles.Text),
                        Dec_Pago_Comprobante = decimal.Parse((string.IsNullOrEmpty(this.txtPagoSoles.Text) ? "0.00" : this.txtPagoSoles.Text)),
                        //Dec_Vuelto_Comprobante = decimal.Parse(txtVueltoSoles.Text),
                        Dec_Vuelto_Comprobante       = decimal.Parse((string.IsNullOrEmpty(this.txtVueltoSoles.Text) ? "0.00" : this.txtVueltoSoles.Text)),
                        Str_Monto_Letras_Comprobante = documento.MontoEnLetras,
                        Str_Hash_Comprobante         = resumentFirma,
                        Str_MsjRpta_Comprobante      = mensajeError,
                        IDUsuarioCreacion            = VariablesGlobales.operador_actual.ID
                    };

                    pBE_ComprobanteTMP.Listado_Detalle = new List <BE_Comprobante_Detalle>();

                    foreach (DataGridViewRow row in grvDetalleVenta.Rows)
                    {
                        pBE_ComprobanteTMP.Listado_Detalle.Add(new BE_Comprobante_Detalle()
                        {
                            Str_Cod_Isla     = row.Cells["Isla"].Value.ToString(),
                            Str_Cod_Surtidor = row.Cells["Surtidor"].Value.ToString(),
                            Str_Cod_Lados    = row.Cells["Cara"].Value.ToString(),
                            Str_Cod_Manguera = row.Cells["Manguera"].Value.ToString(),
                            Str_Cod_Producto = row.Cells["Cara"].Value.ToString(),
                            Dec_Precio_Unitario_DComprobante    = decimal.Parse(row.Cells["PUnit"].Value.ToString()),
                            Dec_Cantidad_DComprobante           = decimal.Parse(row.Cells["Cantidad"].Value.ToString()),
                            Dec_SubTotal_Gravado_DComprobante   = decimal.Parse(row.Cells["STGravado"].Value.ToString()),
                            Dec_SubTotal_Inafecto_DComprobante  = decimal.Parse(row.Cells["STInafecto"].Value.ToString()),
                            Dec_SubTotal_Gratuito_DComprobante  = 0,
                            Dec_SubTotal_Exonerado_DComprobante = 0,
                            Dec_SubTotal_Item_DComprobante      = decimal.Parse(row.Cells["TotaItem"].Value.ToString()),
                            Int_Flg_Agecto_IGV        = int.Parse(row.Cells["FlgAfectoIGV"].Value.ToString()),
                            Dec_IGV_Item_DComprobante = decimal.Parse(row.Cells["IGVUnit"].Value.ToString()),
                            Int_Flg_Agecto_ISC        = int.Parse(row.Cells["FlgAfectoISC"].Value.ToString()),
                            Dec_ISC_Item_DComprobante = decimal.Parse(row.Cells["ISCUnit"].Value.ToString()),
                            IDUsuarioCreacion         = VariablesGlobales.operador_actual.ID
                        });
                    }

                    int id = BL_Comprobante.Registrar_Comprobante(pBE_ComprobanteTMP);

                    if (id > 0)
                    {
                        if (string.IsNullOrEmpty(GestionCombustibles.Properties.Settings.Default.PrinterPath))
                        {
                            MessageBox.Show("No hay una impresora configurada.");
                        }
                        else
                        {
                            string xNumComprobante = txtSerieNumero.Text;
                            string xFecha          = dtpFechaHora.Value.Day.ToString().PadLeft(2, char.Parse("0")) + "-" + dtpFechaHora.Value.Month.ToString().PadLeft(2, char.Parse("0")) + "-" + dtpFechaHora.Value.Year.ToString().PadLeft(2, char.Parse("0")) + " " + dtpFechaHora.Value.Hour.ToString().PadLeft(2, char.Parse("0")) + ":" + dtpFechaHora.Value.Minute.ToString().PadLeft(2, char.Parse("0")) + ":" + dtpFechaHora.Value.Second.ToString().PadLeft(2, char.Parse("0"));
                            string xSurtidor       = cboSurtidor.SelectedValue.ToString();
                            string xLado           = cboCara.SelectedValue.ToString();
                            string xCodHash        = txtCodHash.Text;
                            string xPlaca          = txtPlaca.Text;

                            //
                            decimal xTotal           = Convert.ToDecimal("00");
                            decimal xTotal_gravado   = Convert.ToDecimal("00");
                            decimal xTotal_inafecto  = Convert.ToDecimal("00");
                            decimal xTotal_igv       = Convert.ToDecimal("00");
                            decimal xTotal_exonerado = Convert.ToDecimal("00");
                            decimal xTotal_isc       = Convert.ToDecimal("00");
                            //
                            List <string> xHeader = new List <string>();
                            xHeader.Add((string.IsNullOrEmpty(VariablesGlobales.empresa.Str_nom_empresa) ? "" : VariablesGlobales.empresa.Str_nom_empresa) + "\n");
                            xHeader.Add((string.IsNullOrEmpty(VariablesGlobales.empresa.Str_direccion_empresa) ? "" : VariablesGlobales.empresa.Str_direccion_empresa));
                            xHeader.Add((string.IsNullOrEmpty(VariablesGlobales.empresa.Str_Nom_Distrito) ? "" : VariablesGlobales.empresa.Str_Nom_Distrito) + ", " + (string.IsNullOrEmpty(VariablesGlobales.empresa.Str_Nom_Provincia) ? "" : VariablesGlobales.empresa.Str_Nom_Provincia) + ", " + (string.IsNullOrEmpty(VariablesGlobales.empresa.Str_Nom_Departamento) ? "" : VariablesGlobales.empresa.Str_Nom_Departamento) + "\n");
                            xHeader.Add("RUC " + (string.IsNullOrEmpty(VariablesGlobales.empresa.Str_num_documento) ? "" : VariablesGlobales.empresa.Str_num_documento) + "\n");
                            xHeader.Add("----------------------------------------\n");
                            xHeader.Add("BOLETA DE VENTA ELECTRONICA\n");
                            xHeader.Add(" " + xNumComprobante + "\n");
                            xHeader.Add(" " + xFecha + "\n");
                            xHeader.Add("----------------------------------------\n");
                            xHeader.Add("POS  :" + xSurtidor + "                       LADO: " + xLado + "\n");
                            xHeader.Add("----------------------------------------\n");

                            List <string> xFooter = new List <string>();
                            xFooter.Add("----------------------------------------\n");
                            xFooter.Add("Placa del Vehiculo: " + xPlaca + "\n");
                            xFooter.Add("Cod Has: " + xCodHash + "\n");
                            xFooter.Add("Autorizado mediante\n");
                            xFooter.Add("Resolucion Nro.034-005-0006616/SUNAT \n");
                            xFooter.Add("RUC 20519069262 BOLETA de Venta\n");
                            xFooter.Add("Electronica, para consultar el\n");
                            xFooter.Add("documento ingrese a www.facturas.com.pe\n");
                            xFooter.Add("----------------------------------------\n");
                            xFooter.Add("*** GRACIAS POR SU COMPRA ***\n");

                            //
                            List <string> xCodigo   = new List <string>();
                            List <string> xProducto = new List <string>();
                            List <string> xValor    = new List <string>();
                            List <string> xCant     = new List <string>();
                            List <string> xUM       = new List <string>();

                            ////////// cargar los datos de los productos a facturar
                            ////////xCodigo.Add("GH90");
                            ////////xProducto.Add("GASOLINA90");
                            ////////xCant.Add("1.925");
                            ////////xUM.Add("GLN");
                            ////////xValor.Add("20.00");
                            //////////
                            ////////// cargar los datos de los productos a facturar
                            ////////xCodigo.Add("AG01");
                            ////////xProducto.Add("CIELO 250ML");
                            ////////xCant.Add("1");
                            ////////xUM.Add("UND");
                            ////////xValor.Add("1.50");
                            //////////

                            foreach (DataGridViewRow row in grvDetalleVenta.Rows)
                            {
                                xCodigo.Add(row.Cells[5].Value.ToString());
                                xProducto.Add(row.Cells[6].Value.ToString());
                                xCant.Add(row.Cells[8].Value.ToString());
                                xUM.Add("GLN");
                                xValor.Add(row.Cells[9].Value.ToString());
                            }

                            PrinterUtility.EscPosEpsonCommands.EscPosEpson obj = new PrinterUtility.EscPosEpsonCommands.EscPosEpson();

                            var BytesValue = Encoding.ASCII.GetBytes(string.Empty);
                            BytesValue = PrintExtensions.AddBytes(BytesValue, obj.Alignment.Center());
                            //
                            // IMPRIMIENDO ENCABEZADO //
                            for (int i = 0; i < xHeader.Count; i++)
                            {
                                BytesValue = PrintExtensions.AddBytes(BytesValue, Encoding.ASCII.GetBytes(xHeader[i]));
                            }
                            BytesValue = PrintExtensions.AddBytes(BytesValue, obj.CharSize.Nomarl());
                            // IMPRIMIENDO DETALLES //
                            for (int i = 0; i < xCodigo.Count; i++)
                            {
                                string xC = xCodigo[i];
                                string xP = xProducto[i];
                                string xQ = xCant[i];
                                string xU = xUM[i];
                                string xV = xValor[i];
                                xTotal = xTotal + Convert.ToDecimal(xV);
                                string linea = Der(xC, 8) + Der(xP, 12) + Izq(xQ, 8) + Der(xU, 4) + Izq(xV, 8) + "\n";
                                BytesValue = PrintExtensions.AddBytes(BytesValue, Encoding.ASCII.GetBytes(linea));
                            }
                            BytesValue = PrintExtensions.AddBytes(BytesValue, obj.CharSize.Nomarl());
                            BytesValue = PrintExtensions.AddBytes(BytesValue, Encoding.ASCII.GetBytes("----------------------------------------\n"));
                            BytesValue = PrintExtensions.AddBytes(BytesValue, string.Format("{0,-20}{1,10}{2,10:N2}\n", "TOTAL", "", xTotal));
                            BytesValue = PrintExtensions.AddBytes(BytesValue, string.Format("{0,-20}{2,10}{3,10:N2}\n", "OP.GRAVADA", "", "", xTotal_gravado));
                            BytesValue = PrintExtensions.AddBytes(BytesValue, string.Format("{0,-20}{2,10}{3,10:N2}\n", "OP.INAFECTA", "", "", xTotal_inafecto));
                            BytesValue = PrintExtensions.AddBytes(BytesValue, string.Format("{0,-20}{2,10}{3,10:N2}\n", "IGV (18.00%)", "", "", xTotal_igv));
                            BytesValue = PrintExtensions.AddBytes(BytesValue, string.Format("{0,-20}{2,10}{3,10:N2}\n", "OP.EXONERADA", "", "", xTotal_exonerado));
                            BytesValue = PrintExtensions.AddBytes(BytesValue, string.Format("{0,-20}{2,10}{3,10:N2}\n", "I.S.C.", "", "", xTotal_isc));
                            BytesValue = PrintExtensions.AddBytes(BytesValue, string.Format("{0,-20}{2,10}{3,10:N2}\n", "IMPORTE TOTAL", "", "", xTotal));
                            BytesValue = PrintExtensions.AddBytes(BytesValue, Encoding.ASCII.GetBytes("Conserve su comprobante\n"));
                            // IMPRESION DE PIE DE COMPROBANTE //
                            for (int i = 0; i < xFooter.Count; i++)
                            {
                                BytesValue = PrintExtensions.AddBytes(BytesValue, Encoding.ASCII.GetBytes(xFooter[i]));
                            }
                            BytesValue = PrintExtensions.AddBytes(BytesValue, Encoding.ASCII.GetBytes("\n"));
                            BytesValue = PrintExtensions.AddBytes(BytesValue, VariablesGlobales.empresa.Str_texto);
                            BytesValue = PrintExtensions.AddBytes(BytesValue, Encoding.ASCII.GetBytes("\n"));
                            BytesValue = PrintExtensions.AddBytes(BytesValue, CutPage());
                            PrinterUtility.PrintExtensions.Print(BytesValue, GestionCombustibles.Properties.Settings.Default.PrinterPath);

                            // COMO HABILITAR LA IMPRESORA:
                            // configurar una impresora Generic/Txt apuntando a puerto FILE, renombrarla y compartirla como TMU220
                            // en Settings: crear una clave PrinterPath \\\\<nombre de esta pc>\\TMU220
                            // ejemplo : \\\\DEVELOPER_01\\TMU220
                            //
                            // FIN DE IMPRESION
                        }

                        Descartar();
                    }
                    else
                    {
                        MessageBox.Show("Ocurrió un error al registrar la operación.");
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("ERROR:" + ex.ToString());
            }
        }
예제 #14
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;
        }