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); }
private async void Ejecutar_Click(object sender, RoutedEventArgs e) { System.Windows.Forms.Cursor.Current = Cursors.WaitCursor; //20186C16-C1DC-4717-8F46-407447D225BC = 5 //E6360E58-8BD6-4F80-B65B-8B2098760287 = 6 var response = new DocumentoResponse(); //try //{ // Generar xml y serializar FacturaXml facturaXml = new FacturaXml(); Serializador serializador = new Serializador(); //var invoice = facturaXml.metodoTemp(documento); //response.TramaXmlSinFirma = serializador.GenerateSimpleXML(invoice); response.Exito = true; string xmlTextoPlano = Encoding.UTF8.GetString(Convert.FromBase64String(response.TramaXmlSinFirma)); // Para pruebas // Certificado rutaCertificado = "D:\\certificado\\Certificado-NuevoProveedor\\Wnl2U2wyVk01S2wyMzgzQQ%3d%3d.pfx"; passCertificado = "53P4xfFC8sSeFRmt"; var firmadoRequest = new FirmadoRequest { TramaXmlSinFirma = response.TramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes(rutaCertificado)), PasswordCertificado = passCertificado, UnSoloNodoExtension = false }; EnviarDocumentoRequest enviarDocumentoRequest = new EnviarDocumentoRequest() { Ruc = "1073580496", UsuarioSol = "MODDATOS", ClaveSol = "MODDATOS", EndPointUrl = "https://e-beta.sunat.gob.pe/ol-ti-itcpfegem-beta/billService", IdDocumento = "F001-00000001", TipoDocumento = "01", //TramaXmlFirmado = documentoFirmado.TramaXmlFirmado }; var jsonEnvioDocumento = await PostSimple(enviarDocumentoRequest); string waiiiit = string.Empty; //} //catch (Exception ex) //{ // response.MensajeError = ex.Message; // response.Pila = ex.StackTrace; // response.Exito = false; //} }
public static FirmadoRequest ToSignedModel(CertificadoDigitalModel certificado, string xmlSinFirma, bool node) { FirmadoRequest model = new FirmadoRequest(); model.CertificadoDigital = certificado.CertificadoDigital; model.PasswordCertificado = certificado.ClaveCertificado; model.TramaXmlSinFirma = xmlSinFirma; model.UnSoloNodoExtension = node; return(model); }
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); }
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); }
private async void BtnFirmar_Click(object sender, EventArgs e) { try { //_documento.IdDocumento = "F001-00000001"; //Probar if (string.IsNullOrEmpty(_documento.IdDocumento)) { throw new InvalidOperationException("La Serie y el Correlativo no pueden estar vacíos"); } var tramaXmlSinFirma = Convert.ToBase64String(File.ReadAllBytes(RutaArchivo)); //Original //var tramaXmlSinFirma = Convert.ToBase64String(File.ReadAllBytes(@"D:\Valle\XML_SF\F001-00000001.xml")); var firmadoRequest = new FirmadoRequest { TramaXmlSinFirma = tramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes(@"E:\Certificado_Luna_Verde.pfx")), //@"E:\Valle\certificado\CertificadoPFX.pfx" PasswordCertificado = "pXnC3uUsdf7852Rz", UnSoloNodoExtension = false //rbRetenciones.Checked || rbResumen.Checked }; ICertificador certificador = new Certificador(); var respuestaFirmado = await new Firmar(certificador).Post(firmadoRequest); _documento.ResumenFirma = respuestaFirmado.ResumenFirma; //Firma para ser usada en el PDF si es necesario _documento.FirmaDigital = respuestaFirmado.ValorFirma; // No olvidar agregar las referencias iTextSharp para generar los PDF y las firmas if (!respuestaFirmado.Exito) { throw new ApplicationException(respuestaFirmado.MensajeError); } RutaArchivo = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"{_documento.Emisor.NroDocumento+"-"+_documento.IdDocumento}.xml"); File.WriteAllBytes(RutaArchivo, Convert.FromBase64String(respuestaFirmado.TramaXmlFirmado)); } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { Cursor = Cursors.Default; } }
private async void BtnFirmar_Click(object sender, EventArgs e) { try { //_documento.IdDocumento = "F001-00000001"; //Probar if (string.IsNullOrEmpty(_documento.IdDocumento)) { throw new InvalidOperationException("La Serie y el Correlativo no pueden estar vacíos"); } var tramaXmlSinFirma = Convert.ToBase64String(File.ReadAllBytes(RutaArchivo)); //Original //var tramaXmlSinFirma = Convert.ToBase64String(File.ReadAllBytes(@"D:\Valle\XML_SF\F001-00000001.xml")); var firmadoRequest = new FirmadoRequest { TramaXmlSinFirma = tramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes(@"D:\Valle\certificado\cervallespot.pfx")), PasswordCertificado = "#1DEFRDE32W", UnSoloNodoExtension = false //rbRetenciones.Checked || rbResumen.Checked }; ICertificador certificador = new Certificador(); var respuestaFirmado = await new Firmar(certificador).Post(firmadoRequest); if (!respuestaFirmado.Exito) { throw new ApplicationException(respuestaFirmado.MensajeError); } RutaArchivo = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"CF_{_documento.IdDocumento}.xml"); File.WriteAllBytes(RutaArchivo, Convert.FromBase64String(respuestaFirmado.TramaXmlFirmado)); } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { Cursor = Cursors.Default; } }
public FirmadoRequest Data(int IdEmisor, string tramaXmlSinFirma) { Data_AccesosSunat data_AccesosSunat = new Data_AccesosSunat(IdEmisor); data_AccesosSunat.Read_AccesosSunat(); string certificado = Convert.ToBase64String(File.ReadAllBytes(data_AccesosSunat.CertificadoDigital)); var firmadoRequest = new FirmadoRequest() { TramaXmlSinFirma = tramaXmlSinFirma, CertificadoDigital = certificado, PasswordCertificado = data_AccesosSunat.ClaveCertificado, UnSoloNodoExtension = true }; return(firmadoRequest); }
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); }
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; }); }); }
private static void CrearDocumentoPercepcion() { try { Console.WriteLine("Ejemplo de Percepción"); var documento = new DocumentoPercepcion { Emisor = CrearEmisor(), Receptor = new Contribuyente { NroDocumento = "20100039207", TipoDocumento = "6", NombreLegal = "RANSA COMERCIAL S.A.", Ubigeo = "150101", Direccion = "Av. Argentina 2833", Urbanizacion = "-", Departamento = "CALLAO", Provincia = "CALLAO", Distrito = "CALLAO" }, IdDocumento = "P001-123", FechaEmision = DateTime.Today.ToString(FormatoFecha), Moneda = "PEN", RegimenPercepcion = "01", TasaPercepcion = 2, ImporteTotalPercibido = 200, ImporteTotalCobrado = 10000, Observaciones = "Emision de Facturas del periodo Dic. 2016", DocumentosRelacionados = new List<ItemPercepcion> { new ItemPercepcion { NroDocumento = "E001-457", TipoDocumento = "01", MonedaDocumentoRelacionado = "USD", FechaEmision = DateTime.Today.AddDays(-3).ToString(FormatoFecha), ImporteTotal = 10000, FechaPago = DateTime.Today.ToString(FormatoFecha), NumeroPago = 153, ImporteSinPercepcion = 9800, ImportePercibido = 200, FechaPercepcion = DateTime.Today.ToString(FormatoFecha), ImporteTotalNeto = 10000, TipoCambio = 3.41m, FechaTipoCambio = DateTime.Today.ToString(FormatoFecha) } } }; Console.WriteLine("Generando XML...."); var documentoResponse = RestHelper<DocumentoPercepcion, DocumentoResponse>.Execute("GenerarPercepcion", documento); if (!documentoResponse.Exito) { throw new InvalidOperationException(documentoResponse.MensajeError); } Console.WriteLine("Firmando XML..."); // Firmado del Documento. var firmado = new FirmadoRequest { TramaXmlSinFirma = documentoResponse.TramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes("certificado.pfx")), PasswordCertificado = string.Empty, UnSoloNodoExtension = true }; var responseFirma = RestHelper<FirmadoRequest, FirmadoResponse>.Execute("Firmar", firmado); if (!responseFirma.Exito) { throw new InvalidOperationException(responseFirma.MensajeError); } File.WriteAllBytes("percepcion.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado)); Console.WriteLine("Enviando Retención a SUNAT...."); var sendBill = new EnviarDocumentoRequest { Ruc = documento.Emisor.NroDocumento, UsuarioSol = "MODDATOS", ClaveSol = "MODDATOS", EndPointUrl = UrlOtroCpe, IdDocumento = documento.IdDocumento, TipoDocumento = "40", TramaXmlFirmado = responseFirma.TramaXmlFirmado }; var responseSendBill = RestHelper<EnviarDocumentoRequest, EnviarDocumentoResponse>.Execute("EnviarDocumento", sendBill); if (!responseSendBill.Exito) { throw new InvalidOperationException(responseSendBill.MensajeError); } Console.WriteLine("Respuesta de SUNAT:"); Console.WriteLine(responseSendBill.MensajeRespuesta); File.WriteAllBytes("percepcioncdr.zip", Convert.FromBase64String(responseSendBill.TramaZipCdr)); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { Console.ReadLine(); } }
private static void CrearFactura() { try { Console.WriteLine("Ejemplo Factura"); var documento = new DocumentoElectronico { Emisor = CrearEmisor(), Receptor = new Contribuyente { NroDocumento = "20100039207", TipoDocumento = "6", NombreLegal = "RANSA COMERCIAL S.A." }, IdDocumento = "FF11-001", FechaEmision = DateTime.Today.AddDays(-5).ToString(FormatoFecha), Moneda = "PEN", MontoEnLetras = "SON CIENTO DIECIOCHO SOLES CON 0/100", CalculoIgv = 0.18m, CalculoIsc = 0.10m, CalculoDetraccion = 0.04m, TipoDocumento = "01", TotalIgv = 18, TotalVenta = 118, Gravadas = 100, Items = new List<DetalleDocumento> { new DetalleDocumento { Id = 1, Cantidad = 5, PrecioReferencial = 20, PrecioUnitario = 20, TipoPrecio = "01", CodigoItem = "1234234", Descripcion = "Arroz Costeño", UnidadMedida = "KG", Impuesto = 18, TipoImpuesto = "10", // Gravada TotalVenta = 100, Suma = 100 } } }; Console.WriteLine("Generando XML...."); var documentoResponse = RestHelper<DocumentoElectronico, DocumentoResponse>.Execute("GenerarFactura", documento); if (!documentoResponse.Exito) { throw new InvalidOperationException(documentoResponse.MensajeError); } Console.WriteLine("Firmando XML..."); // Firmado del Documento. var firmado = new FirmadoRequest { TramaXmlSinFirma = documentoResponse.TramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes("certificado.pfx")), PasswordCertificado = string.Empty, UnSoloNodoExtension = false }; var responseFirma = RestHelper<FirmadoRequest, FirmadoResponse>.Execute("Firmar", firmado); if (!responseFirma.Exito) { throw new InvalidOperationException(responseFirma.MensajeError); } File.WriteAllBytes("factura.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado)); Console.WriteLine("Enviando a SUNAT...."); var documentoRequest = new EnviarDocumentoRequest { Ruc = documento.Emisor.NroDocumento, UsuarioSol = "MODDATOS", ClaveSol = "MODDATOS", EndPointUrl = UrlSunat, IdDocumento = documento.IdDocumento, TipoDocumento = documento.TipoDocumento, TramaXmlFirmado = responseFirma.TramaXmlFirmado }; var enviarDocumentoResponse = RestHelper<EnviarDocumentoRequest, EnviarDocumentoResponse>.Execute("EnviarDocumento", documentoRequest); if (!enviarDocumentoResponse.Exito) { throw new InvalidOperationException(enviarDocumentoResponse.MensajeError); } File.WriteAllBytes("facturacdr.zip", Convert.FromBase64String(enviarDocumentoResponse.TramaZipCdr)); Console.WriteLine("Respuesta de SUNAT:"); Console.WriteLine(enviarDocumentoResponse.MensajeRespuesta); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { Console.ReadLine(); } }
private static void CrearComunicacionBaja() { try { Console.WriteLine("Ejemplo de Comunicación de Baja"); var documentoBaja = new ComunicacionBaja { IdDocumento = string.Format("RA-{0:yyyyMMdd}-001", DateTime.Today), FechaEmision = DateTime.Today.ToString(FormatoFecha), FechaReferencia = DateTime.Today.AddDays(-1).ToString(FormatoFecha), Emisor = CrearEmisor(), Bajas = new List<DocumentoBaja>() }; // En las comunicaciones de Baja ya no se pueden colocar boletas, ya que la anulacion de las mismas // la realiza el resumen diario. documentoBaja.Bajas.Add(new DocumentoBaja { Id = 1, Correlativo = "33386", TipoDocumento = "01", Serie = "FA50", MotivoBaja = "Anulación por otro tipo de documento" }); documentoBaja.Bajas.Add(new DocumentoBaja { Id = 2, Correlativo = "86486", TipoDocumento = "01", Serie = "FF14", MotivoBaja = "Anulación por otro datos erroneos" }); Console.WriteLine("Generando XML...."); var documentoResponse = RestHelper<ComunicacionBaja, DocumentoResponse>.Execute("GenerarComunicacionBaja", documentoBaja); if (!documentoResponse.Exito) { throw new InvalidOperationException(documentoResponse.MensajeError); } Console.WriteLine("Firmando XML..."); // Firmado del Documento. var firmado = new FirmadoRequest { TramaXmlSinFirma = documentoResponse.TramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes("Certificado.pfx")), PasswordCertificado = string.Empty, UnSoloNodoExtension = true }; var responseFirma = RestHelper<FirmadoRequest, FirmadoResponse>.Execute("Firmar", firmado); if (!responseFirma.Exito) { throw new InvalidOperationException(responseFirma.MensajeError); } Console.WriteLine("Guardando XML de la Comunicacion de Baja....(Revisar carpeta del ejecutable)"); File.WriteAllBytes("comunicacionbaja.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado)); Console.WriteLine("Enviando a SUNAT...."); var sendBill = new EnviarDocumentoRequest { Ruc = documentoBaja.Emisor.NroDocumento, UsuarioSol = "MODDATOS", ClaveSol = "MODDATOS", EndPointUrl = UrlSunat, IdDocumento = documentoBaja.IdDocumento, TramaXmlFirmado = responseFirma.TramaXmlFirmado }; var enviarResumenResponse = RestHelper<EnviarDocumentoRequest, EnviarResumenResponse>.Execute("EnviarResumen", sendBill); if (!enviarResumenResponse.Exito) { throw new InvalidOperationException(enviarResumenResponse.MensajeError); } Console.WriteLine("Nro de Ticket: {0}", enviarResumenResponse.NroTicket); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { Console.ReadLine(); } }
private static void CrearResumenDiario() { try { Console.WriteLine("Ejemplo de Resumen Diario"); var documentoResumenDiario = new ResumenDiarioNuevo { IdDocumento = string.Format("RC-{0:yyyyMMdd}-001", DateTime.Today), FechaEmision = DateTime.Today.ToString(FormatoFecha), FechaReferencia = DateTime.Today.AddDays(-1).ToString(FormatoFecha), Emisor = CrearEmisor(), Resumenes = new List<GrupoResumenNuevo>() }; documentoResumenDiario.Resumenes.Add(new GrupoResumenNuevo { Id = 1, TipoDocumento = "03", IdDocumento = "BB14-33386", NroDocumentoReceptor = "41614074", TipoDocumentoReceptor = "1", CodigoEstadoItem = 1, // 1 - Agregar. 2 - Modificar. 3 - Eliminar Moneda = "PEN", TotalVenta = 190.9m, TotalIgv = 29.12m, Gravadas = 161.78m, }); // Para los casos de envio de boletas anuladas, se debe primero informar las boletas creadas (1) y luego en un segundo resumen se envian las anuladas. De lo contrario se presentará el error 'El documento indicado no existe no puede ser modificado/eliminado' documentoResumenDiario.Resumenes.Add(new GrupoResumenNuevo { Id = 2, TipoDocumento = "03", IdDocumento = "BB30-33384", NroDocumentoReceptor = "08506678", TipoDocumentoReceptor = "1", CodigoEstadoItem = 1, // 1 - Agregar. 2 - Modificar. 3 - Eliminar Moneda = "USD", TotalVenta = 9580m, TotalIgv = 1411.36m, Gravadas = 8168.64m, }); Console.WriteLine("Generando XML...."); var documentoResponse = RestHelper<ResumenDiarioNuevo, DocumentoResponse>.Execute("GenerarResumenDiario/v2", documentoResumenDiario); if (!documentoResponse.Exito) throw new InvalidOperationException(documentoResponse.MensajeError); Console.WriteLine("Firmando XML..."); // Firmado del Documento. var firmado = new FirmadoRequest { TramaXmlSinFirma = documentoResponse.TramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes("Certificado.pfx")), PasswordCertificado = string.Empty, UnSoloNodoExtension = true }; var responseFirma = RestHelper<FirmadoRequest, FirmadoResponse>.Execute("Firmar", firmado); if (!responseFirma.Exito) { throw new InvalidOperationException(responseFirma.MensajeError); } Console.WriteLine("Guardando XML de Resumen....(Revisar carpeta del ejecutable)"); File.WriteAllBytes("resumendiario.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado)); Console.WriteLine("Enviando a SUNAT...."); var enviarDocumentoRequest = new EnviarDocumentoRequest { Ruc = documentoResumenDiario.Emisor.NroDocumento, UsuarioSol = "MODDATOS", ClaveSol = "MODDATOS", EndPointUrl = UrlSunat, IdDocumento = documentoResumenDiario.IdDocumento, TramaXmlFirmado = responseFirma.TramaXmlFirmado }; var enviarResumenResponse = RestHelper<EnviarDocumentoRequest, EnviarResumenResponse>.Execute("EnviarResumen", enviarDocumentoRequest); if (!enviarResumenResponse.Exito) { throw new InvalidOperationException(enviarResumenResponse.MensajeError); } Console.WriteLine("Nro de Ticket: {0}", enviarResumenResponse.NroTicket); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { Console.ReadLine(); } }
private static void CrearComunicacionBaja() { try { Console.WriteLine("Ejemplo de Comunicación de Baja"); var documentoBaja = new ComunicacionBaja { IdDocumento = string.Format("RA-{0:yyyyMMdd}-001", DateTime.Today), FechaEmision = DateTime.Today.ToString(FormatoFecha), FechaReferencia = DateTime.Today.AddDays(-1).ToString(FormatoFecha), Emisor = CrearEmisor(), Bajas = new List <DocumentoBaja>() }; documentoBaja.Bajas.Add(new DocumentoBaja { Id = 1, Correlativo = "33386", TipoDocumento = "03", Serie = "BB50", MotivoBaja = "Anulación por otro tipo de documento" }); documentoBaja.Bajas.Add(new DocumentoBaja { Id = 2, Correlativo = "86486", TipoDocumento = "01", Serie = "FF14", MotivoBaja = "Anulación por otro datos erroneos" }); Console.WriteLine("Generando XML...."); var client = new RestClient(BaseUrl); var requestInvoice = new RestRequest("GenerarComunicacionBaja", Method.POST) { RequestFormat = DataFormat.Json }; requestInvoice.AddBody(documentoBaja); var documentoResponse = client.Execute <DocumentoResponse>(requestInvoice); if (!documentoResponse.Data.Exito) { throw new ApplicationException(documentoResponse.Data.MensajeError); } Console.WriteLine("Firmando XML..."); // Firmado del Documento. var firmado = new FirmadoRequest { TramaXmlSinFirma = documentoResponse.Data.TramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes("Certificado.pfx")), PasswordCertificado = string.Empty, UnSoloNodoExtension = true }; var requestFirma = new RestRequest("Firmar", Method.POST) { RequestFormat = DataFormat.Json }; requestFirma.AddBody(firmado); var responseFirma = client.Execute <FirmadoResponse>(requestFirma); if (!responseFirma.Data.Exito) { throw new ApplicationException(responseFirma.Data.MensajeError); } Console.WriteLine("Enviando a SUNAT...."); var sendBill = new EnviarDocumentoRequest { Ruc = documentoBaja.Emisor.NroDocumento, UsuarioSol = "MODDATOS", ClaveSol = "MODDATOS", EndPointUrl = UrlSunat, IdDocumento = documentoBaja.IdDocumento, TramaXmlFirmado = responseFirma.Data.TramaXmlFirmado }; var restRequest = new RestRequest("EnviarResumen", Method.POST) { RequestFormat = DataFormat.Json }; restRequest.AddBody(sendBill); var restResponse = client.Execute <EnviarResumenResponse>(restRequest); if (!restResponse.Data.Exito) { throw new ApplicationException(restResponse.Data.MensajeError); } Console.WriteLine("Nro de Ticket: {0}", restResponse.Data.NroTicket); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { Console.ReadLine(); } }
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); }
public static string ImprimirComprobanteAntes(string numeroDocumento, string tipoDocumentoId, string serie, string correlativo, string fechaEmision, decimal montoTotal) { var mensaje = String.Empty; try { var fecha = DateTime.ParseExact(fechaEmision, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture); // var ventaInfoLista = new Negocio.VentaPetroamerica().ListarPaginado(0, numeroDocumento.Trim(), tipoDocumentoId, serie, correlativo, fecha, fecha, 0, 0, String.Empty, 0, 0); var ventaInfoLista = new Negocio.VentaGasolutions().ListarPaginado(0, String.Empty, tipoDocumentoId, serie + "-" + correlativo, fecha, fecha, 0, 0, 0, 0); var ventaGasolutionsDetalleInfo = new VentaDetalleGasolutionsInfo(); ventaInfoLista = ventaInfoLista.Where(v => v.TotalVenta.Equals(montoTotal)).ToList(); var ventaInfo = new VentaGasolutionsInfo(); if (ventaInfoLista.Count > 0) { ventaInfo = ventaInfoLista.FirstOrDefault(); ventaGasolutionsDetalleInfo = new Negocio.VentaGasolutions().ListarDetalle(ventaInfo.VentaGasolutionsId, 0).FirstOrDefault(); } else { mensaje = "No se ha encontrado el comprobante." + "@" + "" + "@" + ventaInfo.NroDocumentoReceptor; return(mensaje); } var ventaDetalleInfo = new List <VentaDetalleInfo>(); _documento = new DocumentoElectronico(); #region Documento _documento.CalculoDetraccion = 0; _documento.CalculoIgv = Decimal.Divide(18, 100); _documento.CalculoIsc = 0; _documento.DescuentoGlobal = 0; #region Emisor var emisor = new DocumentoElectronico().Emisor; emisor.Departamento = ventaInfo.DepartamentoEmisor; emisor.Direccion = ventaInfo.DireccionEmisor; emisor.Distrito = ventaInfo.DistritoEmisor; emisor.NombreComercial = ventaInfo.NombreComercialEmisor; emisor.NombreLegal = ventaInfo.NombreLegalEmisor; emisor.NroDocumento = ventaInfo.NroDocumentoEmisor; emisor.Provincia = ventaInfo.ProvinciaEmisor; emisor.TipoDocumento = "6"; emisor.Ubigeo = ventaInfo.UbigeoEmisor; emisor.Urbanizacion = ""; _documento.Emisor = emisor; #endregion _documento.Exoneradas = 0; _documento.FechaEmision = ventaInfo.FechaEmision.ToString("dd/MM/yyyy"); _documento.Gratuitas = 0; _documento.Gravadas = ventaInfo.Gravadas; _documento.IdDocumento = ventaInfo.IdDocumento; _documento.Inafectas = 0; #region Items var itemId = 1; //foreach (var vd in ventaDetalleInfo) //{ var item = new DetalleDocumento(); //item.Cantidad = vd.Cantidad; item.Cantidad = ventaGasolutionsDetalleInfo.Cantidad; //item.Descripcion = vd.Producto; item.Descripcion = ventaGasolutionsDetalleInfo.Descripcion; //item.Id = itemId; item.Id = ventaGasolutionsDetalleInfo.Id; itemId++; //item.Impuesto = vd.Igv; item.Impuesto = ventaGasolutionsDetalleInfo.Impuesto; //item.PrecioUnitario = vd.PrecioUnitario; item.PrecioUnitario = ventaGasolutionsDetalleInfo.PrecioUnitario; //item.Suma = vd.SubTotal; item.Suma = ventaGasolutionsDetalleInfo.TotalVenta; //item.TotalVenta = vd.MontoTotal; item.TotalVenta = ventaGasolutionsDetalleInfo.TotalVenta; //item.UnidadMedida = vd.UnidadMedida; item.UnidadMedida = ventaGasolutionsDetalleInfo.UnidadMedida; item.Descuento = 0; item.ImpuestoSelectivo = 0; item.OtroImpuesto = 0; item.PrecioReferencial = 0; item.TipoImpuesto = "10"; item.TipoPrecio = "01"; _documento.Items.Add(item); //} #endregion _documento.Moneda = ventaInfo.MonedaId.Equals(Constantes.MonedaSoles) ? Constantes.MonedaSolesSunat : Constantes.MonedaDolaresSunat; _documento.MontoAnticipo = 0; _documento.MontoDetraccion = 0; _documento.MontoEnLetras = Herramientas.NumeroALetras.numeroAletras(ventaInfo.TotalVenta); _documento.MontoPercepcion = 0; _documento.PlacaVehiculo = ventaInfo.PlacaVehiculo; #region Receptor var receptor = new DocumentoElectronico().Receptor; receptor.Departamento = ""; receptor.Direccion = ventaInfo.DireccionReceptor; receptor.Distrito = ""; receptor.NombreComercial = ventaInfo.NombreComercialReceptor; receptor.NombreLegal = ventaInfo.NombreLegalReceptor; receptor.NroDocumento = ventaInfo.NroDocumentoReceptor; receptor.Provincia = ""; receptor.TipoDocumento = ventaInfo.TipoDocumentoReceptor; receptor.Ubigeo = ""; receptor.Urbanizacion = ""; _documento.Receptor = receptor; #endregion _documento.TipoDocumento = ventaInfo.TipoDocumento; _documento.TotalIgv = ventaInfo.TotalIgv; _documento.TotalIsc = 0; _documento.TotalOtrosTributos = 0; _documento.TotalVenta = ventaInfo.TotalVenta; #endregion string metodoApi; switch (_documento.TipoDocumento) { case "07": metodoApi = "api/GenerarNotaCredito"; break; case "08": metodoApi = "api/GenerarNotaDebito"; break; default: metodoApi = "api/GenerarFactura"; break; } var rutaPdfFactura = HostingEnvironment.MapPath("~/Archivos/Documentos/Cliente/" + ventaInfo.NroDocumentoReceptor + ""); #region Generando XML var client = new RestClient(BaseUrl); var requestInvoice = new RestRequest("GenerarFactura", Method.POST) { RequestFormat = DataFormat.Json }; requestInvoice.AddBody(_documento); var documentoResponse = client.Execute <DocumentoResponse>(requestInvoice); if (!documentoResponse.Data.Exito) { throw new ApplicationException(documentoResponse.Data.MensajeError); } // string rutaXml = HostingEnvironment.MapPath("~/Archivos/Facturacion/XML/" + _documento.IdDocumento + ".xml"); string rutaXml = HostingEnvironment.MapPath("~/Archivos/Facturacion/XML/Cliente"); if (!Directory.Exists(rutaXml)) { Directory.CreateDirectory(rutaXml); } File.WriteAllBytes(rutaXml + "/" + _documento.IdDocumento + ".xml", Convert.FromBase64String(documentoResponse.Data.TramaXmlSinFirma)); #endregion #region Firma string rutaCertificado = HostingEnvironment.MapPath("~/Archivos/Facturacion/certificado.pfx"); var firmado = new FirmadoRequest { TramaXmlSinFirma = documentoResponse.Data.TramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes(rutaCertificado)), PasswordCertificado = "9dGxdmm5JHKwKsXc", UnSoloNodoExtension = false }; var requestFirma = new RestRequest("Firmar", Method.POST) { RequestFormat = DataFormat.Json }; requestFirma.AddBody(firmado); var responseFirma = client.Execute <FirmadoResponse>(requestFirma); if (!responseFirma.Data.Exito) { throw new ApplicationException(responseFirma.Data.MensajeError); } //string rutaXmlFirmado = HostingEnvironment.MapPath("~/Archivos/Facturacion/XML/Cliente/" + _documento.IdDocumento + "_Firmado.xml"); string rutaXmlFirmado = HostingEnvironment.MapPath("~/Archivos/Facturacion/XML/Cliente"); if (!Directory.Exists(rutaXmlFirmado)) { Directory.CreateDirectory(rutaXmlFirmado); } File.WriteAllBytes(rutaXmlFirmado + "/" + _documento.IdDocumento + "_Firmado.xml", Convert.FromBase64String(responseFirma.Data.TramaXmlFirmado)); #endregion #region Impresión Comprobante var htmlToComprobante = new NReco.PdfGenerator.HtmlToPdfConverter(); var nombreArchivoComprobante = String.Empty; var comprobanteSB = new StringBuilder(); if (ventaInfo.TipoDocumento.Equals(Constantes.TipoComprobanteFactura)) { comprobanteSB.Append(Herramientas.Helper.ObtenerTexto("~/Archivos/Plantillas/FacturaJulcan.html")); #region Factura //comprobanteSB.Replace("@EMPRESA_LOGO", HttpContext.Current.Server.MapPath("~/Imagenes/petroamerica_logo.png")); comprobanteSB.Replace("@EMPRESA_LOGO", String.Empty); comprobanteSB.Replace("@EMPRESA_NOMBRE", ventaInfo.NombreComercialEmisor); comprobanteSB.Replace("@EMPRESA_DIRECCION", ventaInfo.DireccionEmisor); comprobanteSB.Replace("@GRIFO_DIRECCION", String.Empty); comprobanteSB.Replace("@EMPRESA_RUC", ventaInfo.NroDocumentoEmisor); comprobanteSB.Replace("@IMPRESORA", String.Empty); comprobanteSB.Replace("@NUMEROCOMPROBANTE", ventaInfo.IdDocumento); comprobanteSB.Replace("@FECHA", fechaEmision); comprobanteSB.Replace("@FECHA", fechaEmision); comprobanteSB.Replace("@CLIENTE_NOMBRE", ventaInfo.NombreComercialReceptor); comprobanteSB.Replace("@CLIENTE_RUC", ventaInfo.NroDocumentoReceptor); comprobanteSB.Replace("@CLIENTE_PLACA", ventaInfo.PlacaVehiculo); comprobanteSB.Replace("@CLIENTE_DIRECCION", ventaInfo.DireccionReceptor); comprobanteSB.Replace("@CANTIDAD", ventaGasolutionsDetalleInfo.Cantidad.ToString("N2")); comprobanteSB.Replace("@PRECIO", ventaGasolutionsDetalleInfo.PrecioUnitario.ToString("N2")); comprobanteSB.Replace("@MONTO_VENTA", ventaInfo.Gravadas.ToString("N2")); comprobanteSB.Replace("@PRODUCTO", ventaGasolutionsDetalleInfo.Descripcion); comprobanteSB.Replace("@MONEDA_SIMBOLO", ventaInfo.SimboloMoneda); comprobanteSB.Replace("@MONTO_IMPUESTO", ventaInfo.TotalIgv.ToString("N2")); comprobanteSB.Replace("@MONTO_TOTAL", ventaInfo.TotalVenta.ToString("N2")); comprobanteSB.Replace("@VENDEDOR", String.Empty); comprobanteSB.Replace("@CODIGO_HASH", responseFirma.Data.ResumenFirma); comprobanteSB.Replace("@TEXTO_MONTO_TOTAL", NumeroALetras.numeroAletras(ventaInfo.TotalVenta)); #endregion nombreArchivoComprobante = "Factura_" + DateTime.Now.ToString("ddMMyyyyhhmmss"); // + ".pdf"; } if (ventaInfo.TipoDocumento.Equals(Constantes.TipoComprobanteBoletaVenta)) { comprobanteSB.Append(Herramientas.Helper.ObtenerTexto("~/Archivos/Plantillas/BoletaJulcan.html")); #region Boleta //comprobanteSB.Replace("@EMPRESA_LOGO", HttpContext.Current.Server.MapPath("~/Imagenes/petroamerica_logo.png")); comprobanteSB.Replace("@EMPRESA_LOGO", String.Empty); comprobanteSB.Replace("@EMPRESA_NOMBRE", ventaInfo.NombreComercialEmisor); comprobanteSB.Replace("@EMPRESA_DIRECCION", ventaInfo.DireccionEmisor); comprobanteSB.Replace("@GRIFO_DIRECCION", String.Empty); comprobanteSB.Replace("@EMPRESA_RUC", ventaInfo.NroDocumentoEmisor); comprobanteSB.Replace("@IMPRESORA", String.Empty); comprobanteSB.Replace("@NUMEROCOMPROBANTE", ventaInfo.IdDocumento); comprobanteSB.Replace("@FECHA", fechaEmision); comprobanteSB.Replace("@CLIENTE_NOMBRE", ventaInfo.NombreComercialReceptor); comprobanteSB.Replace("@CLIENTE_DIRECCION", ventaInfo.DireccionReceptor); comprobanteSB.Replace("@CANTIDAD", ventaGasolutionsDetalleInfo.Cantidad.ToString("N2")); comprobanteSB.Replace("@PRECIO", ventaGasolutionsDetalleInfo.PrecioUnitario.ToString("N2")); comprobanteSB.Replace("@MONTO_VENTA", ventaInfo.Gravadas.ToString("N2")); comprobanteSB.Replace("@PRODUCTO", ventaGasolutionsDetalleInfo.Descripcion); comprobanteSB.Replace("@MONEDA_SIMBOLO", ventaInfo.SimboloMoneda); comprobanteSB.Replace("@MONTO_IMPUESTO", ventaInfo.TotalIgv.ToString("N2")); comprobanteSB.Replace("@MONTO_TOTAL", ventaInfo.TotalVenta.ToString("N2")); comprobanteSB.Replace("@VENDEDOR", String.Empty); comprobanteSB.Replace("@CODIGO_HASH", responseFirma.Data.ResumenFirma); comprobanteSB.Replace("@TEXTO_MONTO_TOTAL", NumeroALetras.numeroAletras(ventaInfo.TotalVenta)); #endregion nombreArchivoComprobante = "Boleta_" + DateTime.Now.ToString("ddMMyyyyhhmmss"); // + ".pdf"; } if (!Directory.Exists(rutaPdfFactura)) { Directory.CreateDirectory(rutaPdfFactura); } #region Codigo QR var codigoQR = ventaInfo.NroDocumentoReceptor + "|" + ventaInfo.TipoDocumento + "|" + ventaInfo.IdDocumento.Substring(0, 4) + "|" + ventaInfo.IdDocumento.Substring(5, 8) + "|" + ventaInfo.TotalIgv + "|" + ventaInfo.TotalVenta + "|" + ventaInfo.FechaEmision + "|" + ventaInfo.TipoDocumentoReceptor + "|" + ventaInfo.NroDocumentoReceptor + "|" + responseFirma.Data.ResumenFirma + "|" + responseFirma.Data.ValorFirma; // instantiate a writer object var barcodeWriter = new ZXing.BarcodeWriter(); // set the barcode format barcodeWriter.Format = BarcodeFormat.PDF_417; // write text and generate a 2-D barcode as a bitmap // barcodeWriter.Write(codigoQR).Save(@"C:\Users\jeremy\Desktop\generated.bmp"); //barcodeWriter.Write(codigoQR).Save(HostingEnvironment.MapPath("~/Archivos/Documentos/Cliente/" + ventaInfo.NumeroDocumentoCliente + "/" + _documento.IdDocumento + ".bmp")); barcodeWriter.Write(codigoQR).Save(rutaPdfFactura + "/" + _documento.IdDocumento + ".bmp"); #endregion comprobanteSB.Replace("@CODIGO_QR", HttpContext.Current.Server.MapPath("~/Archivos/Documentos/Cliente/" + ventaInfo.NroDocumentoReceptor + "/" + _documento.IdDocumento + ".bmp")); comprobanteSB = Herramientas.Helper.EncodeHtml(comprobanteSB); //var margins = new PageMargins(); //margins.Left = 1; //htmlToComprobante.Margins = margins; var pdfBytesFactura = htmlToComprobante.GeneratePdf(comprobanteSB.ToString()); // var comprobanteImpreso = rutaPdfFactura + "\\" + nombreArchivoComprobante + ".pdf"; File.WriteAllBytes(rutaPdfFactura + "/" + nombreArchivoComprobante + ".pdf", pdfBytesFactura); File.WriteAllBytes(rutaPdfFactura + "/" + nombreArchivoComprobante + ".xml", Convert.FromBase64String(responseFirma.Data.TramaXmlFirmado)); #endregion mensaje = "El Comprobante se generó correctamente" + "@" + nombreArchivoComprobante + "@" + ventaInfo.NroDocumentoReceptor; } catch (Exception ex) { bool rethrow = ExceptionPolicy.HandleException(ex, Constantes.ExcepcionPoliticaPresentacion); mensaje = rethrow ? ex.Message : Constantes.ExcepcionPoliticaPresentacion; // var sex = new SmartException(ex, usuarioInfo.Matricula, codigoOperacion.ToString()); //RegistrarScript("MostrarMensaje('" + mensaje.Replace("'", "") + "');", "ErrorConsultaComprobante"); mensaje = (mensaje + "-" + ex.Source) + "@" + "" + "@" + numeroDocumento; } return(mensaje); }
static void Main(string[] args) { Console.WriteLine("Prueba de API REST de OpenInvoicePeru (C#)"); try { var documento = new DocumentoElectronico { Emisor = new Contribuyente { NroDocumento = "20100070970", TipoDocumento = "6", Direccion = "CAL.MORELLI NRO. 181 INT. P-2", Urbanizacion = "-", Departamento = "LIMA", Provincia = "LIMA", Distrito = "SAN BORJA", NombreComercial = "PLAZA VEA", NombreLegal = "SUPERMERCADOS PERUANOS SOCIEDAD ANONIMA" }, Receptor = new Contribuyente { NroDocumento = "20100039207", TipoDocumento = "6", NombreLegal = "RANSA COMERCIAL S.A." }, IdDocumento = "FF11-001", FechaEmision = DateTime.Today.AddDays(-5).ToString("yyyy-MM-dd"), Moneda = "PEN", MontoEnLetras = "SON CIENTO DIECIOCHO SOLES CON 0/100", CalculoIgv = 0.18m, CalculoIsc = 0.10m, CalculoDetraccion = 0.04m, TipoDocumento = "01", TotalIgv = 18, TotalVenta = 118, Gravadas = 100, Items = new List <DetalleDocumento>() { new DetalleDocumento { Id = 1, Cantidad = 5, PrecioReferencial = 20, PrecioUnitario = 20, TipoPrecio = "01", CodigoItem = "1234234", Descripcion = "Arroz Costeño", UnidadMedida = "KG", Impuesto = 18, TipoImpuesto = "10", // Gravada TotalVenta = 100, Suma = 100 } } }; Console.WriteLine("Generando XML...."); var client = new RestClient(_baseUrl); var requestInvoice = new RestRequest("GenerarFactura", Method.POST) { RequestFormat = DataFormat.Json }; requestInvoice.AddBody(documento); var documentoResponse = client.Execute <DocumentoResponse>(requestInvoice); if (!documentoResponse.Data.Exito) { throw new ApplicationException(documentoResponse.Data.MensajeError); } Console.WriteLine("Firmando XML..."); // Firmado del Documento. var firmado = new FirmadoRequest { TramaXmlSinFirma = documentoResponse.Data.TramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes("certificado.pfx")), PasswordCertificado = string.Empty, UnSoloNodoExtension = false }; var requestFirma = new RestRequest("Firmar", Method.POST) { RequestFormat = DataFormat.Json }; requestFirma.AddBody(firmado); var responseFirma = client.Execute <FirmadoResponse>(requestFirma); if (!responseFirma.Data.Exito) { throw new ApplicationException(responseFirma.Data.MensajeError); } Console.WriteLine("Enviando a SUNAT...."); var sendBill = new EnviarDocumentoRequest { Ruc = documento.Emisor.NroDocumento, UsuarioSol = "MODDATOS", ClaveSol = "MODDATOS", EndPointUrl = "https://e-beta.sunat.gob.pe/ol-ti-itcpfegem-beta/billService", IdDocumento = documento.IdDocumento, TipoDocumento = documento.TipoDocumento, TramaXmlFirmado = responseFirma.Data.TramaXmlFirmado }; var requestSendBill = new RestRequest("EnviarDocumento", Method.POST) { RequestFormat = DataFormat.Json }; requestSendBill.AddBody(sendBill); var responseSendBill = client.Execute <EnviarDocumentoResponse>(requestSendBill); if (!responseSendBill.Data.Exito) { throw new ApplicationException(responseSendBill.Data.MensajeError); } Console.WriteLine("Respuesta de SUNAT:"); Console.WriteLine(responseSendBill.Data.MensajeRespuesta); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { Console.ReadLine(); } }
private async void CrearXmlFacturas(int ii) { try { string idDoc = Convert.ToString(DtDocumentos.Rows[ii]["Seriedocumento"] + "-" + DtDocumentos.Rows[ii]["NumeroDocumento"]); string vletras = Convert.ToString(DtDocumentos.Rows[ii]["letras"]); decimal vDscto = 0; string vNroDocumento = Convert.ToString(DtDocumentos.Rows[ii]["clienteID"]); string vTipoDocumento = Convert.ToString(DtDocumentos.Rows[ii]["IdentidadID"]); string vNombreLegal = Convert.ToString(DtDocumentos.Rows[ii]["ClienterazonSocial"]); DocumentoElectronico _xDocumento = new DocumentoElectronico { Emisor = CrearEmisor(DtEmpresa), Receptor = new Contribuyente { NroDocumento = vNroDocumento, TipoDocumento = vTipoDocumento, NombreLegal = vNombreLegal, }, }; _xDocumento.IdDocumento = idDoc; _xDocumento.FechaEmision = DtpFechaDoc.Value.ToString(FormatoFecha); _xDocumento.Moneda = "PEN"; _xDocumento.MontoEnLetras = vletras; _xDocumento.CalculoIgv = 18m; _xDocumento.CalculoIsc = Convert.ToDecimal(DtDocumentos.Rows[ii]["porcentajeIsc"]); _xDocumento.CalculoDetraccion = 0.00m; _xDocumento.TipoDocumento = Convert.ToString(DtDocumentos.Rows[ii]["documentoID"]); _xDocumento.TotalGravadas = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteGravado"]); _xDocumento.TotalInafectas = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteinafecto"]); _xDocumento.TotalExoneradas = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteexonerado"]); _xDocumento.TotalGratuitas = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteGratuitas"]); _xDocumento.TotalOtrosTributos = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteOtros"]); _xDocumento.TotalIsc = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteisc"]); _xDocumento.TotalIgv = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteIgv"]); _xDocumento.DescuentoGlobal = vDscto; _xDocumento.TotalVenta = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteventa"]); _xDocumento.Items = new List <DetalleDocumento>(); // nuevo 2.1 // _xDocumento.PorcentajeIgv = Convert.ToDecimal(DtDocumentos.Rows[ii]["PorcentajeIgv"]); _xDocumento.FechaRegistro = Convert.ToString(DtDocumentos.Rows[ii]["fechaRegistro"]); _xDocumento.AnexoSunat = Convert.ToString(DtDocumentos.Rows[ii]["AnexoSunat"]); _xDocumento.NroPedido = Convert.ToString(DtDocumentos.Rows[ii]["pedidonumero"]); DtArticulos = DetalleArticulos(DtDocumentos, ii); _xDocumento.TotItem = DtArticulos.Rows.Count; for (int i3 = 0; i3 <= DtArticulos.Rows.Count - 1; i3++) { _xDocumento.Items.Add(DetalleItem(DtArticulos, i3)); } string vTipoDoc = Convert.ToString(DtDocumentos.Rows[ii]["DocumentoID"]); string vNroDocumentoModifica = Convert.ToString(DtDocumentos.Rows[ii]["SeriedocumentoModifica"]) + "-" + Convert.ToString(DtDocumentos.Rows[ii]["NumeroDocumentoModifica"]); if (vTipoDoc == "08") { string vNroDocumentoModifica1 = Convert.ToString(DtDocumentos.Rows[ii]["SeriedocumentoModifica"]); } if (vTipoDoc == "07" || vTipoDoc == "08") { // nota de credito var vRelacionado = new DocumentoRelacionado { TipoDocumento = Convert.ToString(DtDocumentos.Rows[ii]["TipoDocumentoModifica"]), NroDocumento = vNroDocumentoModifica }; _xDocumento.Relacionados.Add(vRelacionado); // nota de debito var vDiscrepancia = new Discrepancia { Tipo = Convert.ToString(DtDocumentos.Rows[ii]["TipodocumentoModifica"]), NroReferencia = vNroDocumentoModifica, Descripcion = Convert.ToString(DtDocumentos.Rows[ii]["DescripcionMotivoNota"]) }; _xDocumento.Discrepancias.Add(vDiscrepancia); } string _metodoApi = ""; switch (vTipoDoc) { case "07": _metodoApi = "api/GenerarNotaCredito"; break; case "08": _metodoApi = "api/GenerarNotaDebito"; break; default: _metodoApi = "api/GenerarFactura"; break; } var response = await _client.PostAsJsonAsync(_metodoApi, _xDocumento); var respuesta = await response.Content.ReadAsAsync <DocumentoResponse>(); if (!respuesta.Exito) { throw new ApplicationException(respuesta.MensajeError); } idDoc = DtEmpresa.Rows[0]["EmpresaRuc"] + "-" + vTipoDoc; idDoc += "-" + Convert.ToString(DtDocumentos.Rows[ii]["Seriedocumento"] + "-" + DtDocumentos.Rows[ii]["NumeroDocumento"]); vArchivoXML = Path.Combine(vRutaXml, $"{idDoc}.xml"); // File.WriteAllBytes(vArchivoXML, Convert.FromBase64String(respuesta.TramaXmlSinFirma)); // return; // String vRutaXml = Convert.ToString(DtEmpresa.Rows[0]["CarpetaEnviosXml"]); var tramaXmlSinFirma = respuesta.TramaXmlSinFirma; String vRutaCertificado = Convert.ToString(DtEmpresa.Rows[0]["CarpetaCertificadoDigital"]) + Convert.ToString(DtEmpresa.Rows[0]["NombreCertificadoDigital"]); var firmadoRequest = new FirmadoRequest { TramaXmlSinFirma = tramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes(vRutaCertificado)), PasswordCertificado = Convert.ToString(DtEmpresa.Rows[0]["PasswCertificadoDigital"]), UnSoloNodoExtension = true }; var jsonFirmado = await _client.PostAsJsonAsync("api/Firmar", firmadoRequest); var respuestaFirmado = await jsonFirmado.Content.ReadAsAsync <FirmadoResponse>(); if (!respuestaFirmado.Exito) { throw new ApplicationException(respuestaFirmado.MensajeError); } vArchivoXML = Path.Combine(vRutaXml, $"{idDoc}.xml"); File.WriteAllBytes(vArchivoXML, Convert.FromBase64String(respuestaFirmado.TramaXmlFirmado)); ReemplaCaracteres(Convert.ToString(vArchivoXML)); } catch (Exception ex) { MessageBox.Show(ex.Message); txtResult.Text = txtResult.Text + ex.Message + Environment.NewLine; } }
private async void CrearBajas() { try { if (string.IsNullOrEmpty(vFechaXml)) { throw new InvalidOperationException("La Serie y el Correlativo no pueden estar vacíos"); } var tramaXmlSinFirma = Convert.ToBase64String(File.ReadAllBytes(vArchivoXML)); String vRutaCertificado = Convert.ToString(DtEmpresa.Rows[0]["CarpetaCertificadoDigital"]) + Convert.ToString(DtEmpresa.Rows[0]["NombreCertificadoDigital"]); var firmadoRequest = new FirmadoRequest { TramaXmlSinFirma = tramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes(vRutaCertificado)), PasswordCertificado = Convert.ToString(DtEmpresa.Rows[0]["PasswCertificadoDigital"]), UnSoloNodoExtension = true }; var jsonFirmado = await _client.PostAsJsonAsync("api/Firmar", firmadoRequest); var respuestaFirmado = await jsonFirmado.Content.ReadAsAsync <FirmadoResponse>(); File.WriteAllBytes(vArchivoXML, Convert.FromBase64String(respuestaFirmado.TramaXmlFirmado)); ReemplaCaracteres(Convert.ToString(vArchivoXML)); if (!respuestaFirmado.Exito) { throw new ApplicationException(respuestaFirmado.MensajeError); } var TramaXML = Convert.ToBase64String(File.ReadAllBytes(vArchivoXML)); var enviarDocumentoRequest = new EnviarDocumentoRequest { UsuarioSol = Convert.ToString(DtEmpresa.Rows[0]["EmpresaUsuarioSol"]), ClaveSol = Convert.ToString(DtEmpresa.Rows[0]["EmpresaClaveSol"]), EndPointUrl = vUrlSunat, IdDocumento = vFechaXml, TipoDocumento = vTipoDoc, TramaXmlFirmado = TramaXML }; var apiMetodo = "api/EnviarResumen"; var jsonEnvioDocumento = await _client.PostAsJsonAsync(apiMetodo, enviarDocumentoRequest); RespuestaComunConArchivo respuestaEnvio; respuestaEnvio = await jsonEnvioDocumento.Content.ReadAsAsync <EnviarResumenResponse>(); var rpta = (EnviarResumenResponse)respuestaEnvio; txtResult.Text = txtResult.Text + "\n" + $@"{Resources.procesoCorrecto}{Environment.NewLine}{rpta.NroTicket}{Environment.NewLine}"; if (!respuestaEnvio.Exito) { throw new ApplicationException(respuestaEnvio.MensajeError); } if (!string.IsNullOrEmpty(rpta.NroTicket)) { ActualizaNroTicket(); } if (chkVoz.Checked) { Hablar(); } } catch (Exception ex) { txtResult.Text = txtResult.Text + Environment.NewLine + ex.Message; if (chkVoz.Checked) { Hablar(); } } }
private async void btnGen_Click(object sender, EventArgs e) { try { Cursor = Cursors.WaitCursor; string codigoTipoDoc; switch (cboTipoDoc.SelectedIndex) { case 0: codigoTipoDoc = "01"; break; case 1: codigoTipoDoc = "03"; break; case 2: codigoTipoDoc = "07"; break; case 3: codigoTipoDoc = "08"; break; case 4: codigoTipoDoc = "20"; break; case 5: codigoTipoDoc = "40"; break; case 6: codigoTipoDoc = "RC"; break; case 7: codigoTipoDoc = "RA"; break; case 8: codigoTipoDoc = "09"; break; default: codigoTipoDoc = "01"; break; } if (string.IsNullOrEmpty(txtSerieCorrelativo.Text)) { throw new InvalidOperationException("La Serie y el Correlativo no pueden estar vacíos"); } var tramaXmlSinFirma = Convert.ToBase64String(File.ReadAllBytes(txtSource.Text)); var firmadoRequest = new FirmadoRequest { TramaXmlSinFirma = tramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes(txtRutaCertificado.Text)), PasswordCertificado = txtPassCertificado.Text, UnSoloNodoExtension = rbRetenciones.Checked || rbResumen.Checked }; var jsonFirmado = await _client.PostAsJsonAsync("api/Firmar", firmadoRequest); var respuestaFirmado = await jsonFirmado.Content.ReadAsAsync <FirmadoResponse>(); if (!respuestaFirmado.Exito) { throw new ApplicationException(respuestaFirmado.MensajeError); } var enviarDocumentoRequest = new EnviarDocumentoRequest { Ruc = txtNroRuc.Text, UsuarioSol = txtUsuarioSol.Text, ClaveSol = txtClaveSol.Text, EndPointUrl = ValorSeleccionado(), IdDocumento = txtSerieCorrelativo.Text, TipoDocumento = codigoTipoDoc, TramaXmlFirmado = respuestaFirmado.TramaXmlFirmado }; var apiMetodo = rbResumen.Checked && codigoTipoDoc != "09" ? "api/EnviarResumen" : "api/EnviarDocumento"; var jsonEnvioDocumento = await _client.PostAsJsonAsync(apiMetodo, enviarDocumentoRequest); RespuestaComunConArchivo respuestaEnvio; if (!rbResumen.Checked) { respuestaEnvio = await jsonEnvioDocumento.Content.ReadAsAsync <EnviarDocumentoResponse>(); var rpta = (EnviarDocumentoResponse)respuestaEnvio; txtResult.Text = $@"{Resources.procesoCorrecto}{Environment.NewLine}{rpta.MensajeRespuesta} siendo las {DateTime.Now}"; try { if (rpta.Exito && !string.IsNullOrEmpty(rpta.TramaZipCdr)) { File.WriteAllBytes($"{Program.CarpetaXml}\\{respuestaEnvio.NombreArchivo}", Convert.FromBase64String(respuestaFirmado.TramaXmlFirmado)); File.WriteAllBytes($"{Program.CarpetaCdr}\\R-{respuestaEnvio.NombreArchivo}", Convert.FromBase64String(rpta.TramaZipCdr)); } } catch (Exception ex) { MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); } } else { respuestaEnvio = await jsonEnvioDocumento.Content.ReadAsAsync <EnviarResumenResponse>(); var rpta = (EnviarResumenResponse)respuestaEnvio; txtResult.Text = $@"{Resources.procesoCorrecto}{Environment.NewLine}{rpta.NroTicket}"; } if (!respuestaEnvio.Exito) { throw new ApplicationException(respuestaEnvio.MensajeError); } if (chkVoz.Checked) { Hablar(); } } catch (Exception ex) { txtResult.Text = ex.Message; } finally { Cursor = Cursors.Default; } }
private static void CrearDocumentoPercepcion() { try { Console.WriteLine("Ejemplo de Percepción"); var documento = new DocumentoPercepcion { Emisor = CrearEmisor(), Receptor = new Contribuyente { NroDocumento = "20100039207", TipoDocumento = "6", NombreLegal = "RANSA COMERCIAL S.A.", Ubigeo = "150101", Direccion = "Av. Argentina 2833", Urbanizacion = "-", Departamento = "CALLAO", Provincia = "CALLAO", Distrito = "CALLAO" }, IdDocumento = "P001-123", FechaEmision = DateTime.Today.ToString(FormatoFecha), Moneda = "PEN", RegimenPercepcion = "01", TasaPercepcion = 2, ImporteTotalPercibido = 200, ImporteTotalCobrado = 10000, Observaciones = "Emision de Facturas del periodo Dic. 2016", DocumentosRelacionados = new List <ItemPercepcion> { new ItemPercepcion { NroDocumento = "E001-457", TipoDocumento = "01", MonedaDocumentoRelacionado = "USD", FechaEmision = DateTime.Today.AddDays(-3).ToString(FormatoFecha), ImporteTotal = 10000, FechaPago = DateTime.Today.ToString(FormatoFecha), NumeroPago = 153, ImporteSinPercepcion = 9800, ImportePercibido = 200, FechaPercepcion = DateTime.Today.ToString(FormatoFecha), ImporteTotalNeto = 10000, TipoCambio = 3.41m, FechaTipoCambio = DateTime.Today.ToString(FormatoFecha) } } }; Console.WriteLine("Generando XML...."); var client = new RestClient(BaseUrl); var requestRetencion = new RestRequest("GenerarPercepcion", Method.POST) { RequestFormat = DataFormat.Json }; requestRetencion.AddBody(documento); var documentoResponse = client.Execute <DocumentoResponse>(requestRetencion); if (!documentoResponse.Data.Exito) { throw new ApplicationException(documentoResponse.Data.MensajeError); } Console.WriteLine("Firmando XML..."); // Firmado del Documento. var firmado = new FirmadoRequest { TramaXmlSinFirma = documentoResponse.Data.TramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes("certificado.pfx")), PasswordCertificado = string.Empty, UnSoloNodoExtension = true }; var requestFirma = new RestRequest("Firmar", Method.POST) { RequestFormat = DataFormat.Json }; requestFirma.AddBody(firmado); var responseFirma = client.Execute <FirmadoResponse>(requestFirma); if (!responseFirma.Data.Exito) { throw new ApplicationException(responseFirma.Data.MensajeError); } Console.WriteLine("Codigo Hash: {0}", responseFirma.Data.ResumenFirma); File.WriteAllBytes("percepcion.xml", Convert.FromBase64String(responseFirma.Data.TramaXmlFirmado)); Console.WriteLine("Enviando Retención a SUNAT...."); var sendBill = new EnviarDocumentoRequest { Ruc = documento.Emisor.NroDocumento, UsuarioSol = "MODDATOS", ClaveSol = "MODDATOS", EndPointUrl = "https://e-beta.sunat.gob.pe/ol-ti-itemision-otroscpe-gem-beta/billService", IdDocumento = documento.IdDocumento, TipoDocumento = "40", TramaXmlFirmado = responseFirma.Data.TramaXmlFirmado }; var requestSendBill = new RestRequest("EnviarDocumento", Method.POST) { RequestFormat = DataFormat.Json }; requestSendBill.AddBody(sendBill); var responseSendBill = client.Execute <EnviarDocumentoResponse>(requestSendBill); if (!responseSendBill.Data.Exito) { throw new ApplicationException(responseSendBill.Data.MensajeError); } Console.WriteLine("Respuesta de SUNAT:"); Console.WriteLine(responseSendBill.Data.MensajeRespuesta); File.WriteAllBytes("cdr_percepcion.zip", Convert.FromBase64String(responseSendBill.Data.TramaZipCdr)); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { Console.ReadLine(); } }
private async void CrearFacturas(int ii) { try { string codigoTipoDoc; switch (cboTipoDoc.SelectedIndex) { case 0: codigoTipoDoc = "01"; break; case 1: codigoTipoDoc = "03"; break; case 2: codigoTipoDoc = "07"; break; case 3: codigoTipoDoc = "08"; break; case 4: codigoTipoDoc = "20"; break; case 5: codigoTipoDoc = "40"; break; case 6: codigoTipoDoc = "RC"; break; case 7: codigoTipoDoc = "RA"; break; case 8: codigoTipoDoc = "09"; break; default: codigoTipoDoc = "01"; break; } string idDoc = Convert.ToString(DtDocumentos.Rows[ii]["Seriedocumento"] + "-" + DtDocumentos.Rows[ii]["NumeroDocumento"]); String vRutaXml = Convert.ToString(DtEmpresa.Rows[0]["CarpetaEnviosXml"]); RutaArchivo = Path.Combine(vRutaXml, $"{idDoc}.xml"); if (string.IsNullOrEmpty(idDoc)) { throw new InvalidOperationException("La Serie y el Correlativo no pueden estar vacíos"); } var tramaXmlSinFirma = Convert.ToBase64String(File.ReadAllBytes(RutaArchivo)); String vRutaCertificado = Convert.ToString(DtEmpresa.Rows[0]["CarpetaCertificadoDigital"]) + Convert.ToString(DtEmpresa.Rows[0]["NombreCertificadoDigital"]); var firmadoRequest = new FirmadoRequest { TramaXmlSinFirma = tramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes(vRutaCertificado)), PasswordCertificado = Convert.ToString(DtEmpresa.Rows[0]["PasswCertificadoDigital"]), UnSoloNodoExtension = rbRetenciones.Checked || rbResumen.Checked }; var jsonFirmado = await _client.PostAsJsonAsync("api/Firmar", firmadoRequest); var respuestaFirmado = await jsonFirmado.Content.ReadAsAsync <FirmadoResponse>(); if (!respuestaFirmado.Exito) { throw new ApplicationException(respuestaFirmado.MensajeError); } var enviarDocumentoRequest = new EnviarDocumentoRequest { Ruc = Convert.ToString(DtEmpresa.Rows[0]["EmpresaRuc"]), UsuarioSol = Convert.ToString(DtEmpresa.Rows[0]["EmpresaUsuarioSol"]), ClaveSol = Convert.ToString(DtEmpresa.Rows[0]["EmpresaClaveSol"]), EndPointUrl = ValorSeleccionado(), IdDocumento = idDoc, TipoDocumento = codigoTipoDoc, TramaXmlFirmado = respuestaFirmado.TramaXmlFirmado }; var apiMetodo = rbResumen.Checked && codigoTipoDoc != "09" ? "api/EnviarResumen" : "api/EnviarDocumento"; var jsonEnvioDocumento = await _client.PostAsJsonAsync(apiMetodo, enviarDocumentoRequest); RespuestaComunConArchivo respuestaEnvio; if (!rbResumen.Checked) { respuestaEnvio = await jsonEnvioDocumento.Content.ReadAsAsync <EnviarDocumentoResponse>(); var rpta = (EnviarDocumentoResponse)respuestaEnvio; txtResult.Text = txtResult.Text + "\n" + idDoc + " " + $@"{Resources.procesoCorrecto}{Environment.NewLine}{rpta.MensajeRespuesta} siendo las {DateTime.Now}{Environment.NewLine}"; try { if (rpta.Exito && !string.IsNullOrEmpty(rpta.TramaZipCdr)) { File.WriteAllBytes($"{Program.CarpetaXml}\\{respuestaEnvio.NombreArchivo}", Convert.FromBase64String(respuestaFirmado.TramaXmlFirmado)); File.WriteAllBytes($"{Program.CarpetaCdr}\\R-{respuestaEnvio.NombreArchivo}", Convert.FromBase64String(rpta.TramaZipCdr)); } } catch (Exception ex) { MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); } } else { respuestaEnvio = await jsonEnvioDocumento.Content.ReadAsAsync <EnviarResumenResponse>(); var rpta = (EnviarResumenResponse)respuestaEnvio; txtResult.Text = txtResult.Text + "\n" + $@"{Resources.procesoCorrecto}{Environment.NewLine}{rpta.NroTicket}{Environment.NewLine}"; } if (!respuestaEnvio.Exito) { throw new ApplicationException(respuestaEnvio.MensajeError); } if (chkVoz.Checked) { Hablar(); } } catch (Exception ex) { txtResult.Text = txtResult.Text + Environment.NewLine + ex.Message; if (chkVoz.Checked) { Hablar(); } } }
private async void CrearResumen() { try { String vRutaXml = Convert.ToString(DtEmpresa.Rows[0]["CarpetaEnviosXml"]); if (string.IsNullOrEmpty(vFechaXml)) { throw new InvalidOperationException("La Serie y el Correlativo no pueden estar vacíos"); } var tramaXmlSinFirma = Convert.ToBase64String(File.ReadAllBytes(RutaArchivo)); String vRutaCertificado = Convert.ToString(DtEmpresa.Rows[0]["CarpetaCertificadoDigital"]) + Convert.ToString(DtEmpresa.Rows[0]["NombreCertificadoDigital"]); var firmadoRequest = new FirmadoRequest { TramaXmlSinFirma = tramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes(vRutaCertificado)), PasswordCertificado = Convert.ToString(DtEmpresa.Rows[0]["PasswCertificadoDigital"]), UnSoloNodoExtension = rbResumen.Checked || rbRetenciones.Checked }; var jsonFirmado = await _client.PostAsJsonAsync("api/Firmar", firmadoRequest); var respuestaFirmado = await jsonFirmado.Content.ReadAsAsync <FirmadoResponse>(); if (!respuestaFirmado.Exito) { throw new ApplicationException(respuestaFirmado.MensajeError); } var enviarDocumentoRequest = new EnviarDocumentoRequest { Ruc = Convert.ToString(DtEmpresa.Rows[0]["EmpresaRuc"]), UsuarioSol = Convert.ToString(DtEmpresa.Rows[0]["EmpresaUsuarioSol"]), ClaveSol = Convert.ToString(DtEmpresa.Rows[0]["EmpresaClaveSol"]), EndPointUrl = ValorSeleccionado(), IdDocumento = RutaArchivo, TipoDocumento = CodigoTipoDoc, TramaXmlFirmado = respuestaFirmado.TramaXmlFirmado }; var apiMetodo = "api/EnviarResumen"; var jsonEnvioDocumento = await _client.PostAsJsonAsync(apiMetodo, enviarDocumentoRequest); RespuestaComunConArchivo respuestaEnvio; respuestaEnvio = await jsonEnvioDocumento.Content.ReadAsAsync <EnviarResumenResponse>(); var rpta = (EnviarResumenResponse)respuestaEnvio; txtResult.Text = txtResult.Text + "\n" + $@"{Resources.procesoCorrecto}{Environment.NewLine}{rpta.NroTicket}{Environment.NewLine}"; if (!respuestaEnvio.Exito) { throw new ApplicationException(respuestaEnvio.MensajeError); } if (chkVoz.Checked) { Hablar(); } } catch (Exception ex) { txtResult.Text = txtResult.Text + Environment.NewLine + ex.Message; if (chkVoz.Checked) { Hablar(); } } }
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(); } }
//public static string ImprimirComprobante(int ventaPetroamericaId, int ventaId) public static string ImprimirComprobante(string numeroDocumento, string tipoDocumentoId, string serie, string correlativo, string fechaEmision, decimal montoTotalComprobante) { var mensaje = String.Empty; try { var empresaInfo = new Empresa().Listar(0).FirstOrDefault(); var agenciaInfo = new Agencia().Listar(0).FirstOrDefault(); //var ventaInfo = new Negocio.VentaGasolutions().Listar(ventaPetroamericaId).FirstOrDefault(); var ventaInfoLista = new Negocio.VentaGasolutions().ListarPaginado(0, numeroDocumento, tipoDocumentoId, serie + "-" + correlativo, DateTime.ParseExact(fechaEmision, "dd/MM/yyyy", null), DateTime.ParseExact(fechaEmision, "dd/MM/yyyy", null), 0, 0, 0, 0); var ventaGasolutionsDetalleInfoLista = new List <VentaDetalleGasolutionsInfo>(); //var ventaGasolutionsDetalleInfo = new Negocio.VentaGasolutions().ListarDetalle(ventaPetroamericaId, 0).ToList(); //var ventaGasolutionsDetalleInfo = new Negocio.VentaGasolutions().ListarDetalle(ventaInfo.VentaGasolutionsId, 0).ToList(); ventaInfoLista = ventaInfoLista.Where(v => v.TotalVenta.Equals(montoTotalComprobante)).ToList(); var ventaInfo = new VentaGasolutionsInfo(); if (ventaInfoLista.Count > 0) { ventaInfo = ventaInfoLista.FirstOrDefault(); ventaGasolutionsDetalleInfoLista = new Negocio.VentaGasolutions().ListarDetalle(ventaInfo.VentaGasolutionsId, 0); } else { mensaje = "No se ha encontrado el comprobante." + "@" + "" + "@" + ventaInfo.NroDocumentoReceptor; return(mensaje); } var ventaDetalleInfo = new List <VentaDetalleInfo>(); _documento = new DocumentoElectronico(); #region Documento _documento.CalculoDetraccion = 0; _documento.CalculoIgv = Decimal.Divide(18, 100); _documento.CalculoIsc = 0; _documento.DescuentoGlobal = 0; #region Emisor var emisor = new DocumentoElectronico().Emisor; emisor.Departamento = ventaInfo.DepartamentoEmisor; emisor.Direccion = ventaInfo.DireccionEmisor; emisor.Distrito = ventaInfo.DistritoEmisor; emisor.NombreComercial = ventaInfo.NombreComercialEmisor; emisor.NombreLegal = ventaInfo.NombreLegalEmisor; emisor.NroDocumento = ventaInfo.NroDocumentoEmisor; emisor.Provincia = ventaInfo.ProvinciaEmisor; emisor.TipoDocumento = "6"; emisor.Ubigeo = ventaInfo.UbigeoEmisor; emisor.Urbanizacion = ""; _documento.Emisor = emisor; #endregion _documento.Exoneradas = 0; _documento.FechaEmision = ventaInfo.FechaEmision.ToString("dd/MM/yyyy"); _documento.Gratuitas = 0; _documento.Gravadas = ventaInfo.Gravadas; _documento.IdDocumento = ventaInfo.IdDocumento; _documento.Inafectas = 0; #region Items var itemId = 1; foreach (var vd in ventaGasolutionsDetalleInfoLista) { var item = new DetalleDocumento(); item.Cantidad = vd.Cantidad; item.Descripcion = vd.Descripcion; item.Id = vd.Id; itemId++; item.Impuesto = vd.Impuesto; item.PrecioUnitario = vd.PrecioUnitario; item.Suma = vd.TotalVenta; item.TotalVenta = vd.TotalVenta; item.UnidadMedida = vd.UnidadMedida; item.Descuento = 0; item.ImpuestoSelectivo = 0; item.OtroImpuesto = 0; item.PrecioReferencial = 0; item.TipoImpuesto = "10"; item.TipoPrecio = "01"; _documento.Items.Add(item); } #endregion _documento.Moneda = ventaInfo.MonedaId.Equals(Constantes.MonedaSoles) ? Constantes.MonedaSolesSunat : Constantes.MonedaDolaresSunat; _documento.MontoAnticipo = 0; _documento.MontoDetraccion = 0; _documento.MontoEnLetras = Herramientas.NumeroALetras.numeroAletras(ventaInfo.TotalVenta); _documento.MontoPercepcion = 0; _documento.PlacaVehiculo = ventaInfo.PlacaVehiculo; #region Receptor var receptor = new DocumentoElectronico().Receptor; receptor.Departamento = ""; receptor.Direccion = ventaInfo.DireccionReceptor; receptor.Distrito = ""; receptor.NombreComercial = ventaInfo.NombreComercialReceptor; receptor.NombreLegal = ventaInfo.NombreLegalReceptor; receptor.NroDocumento = ventaInfo.NroDocumentoReceptor; receptor.Provincia = ""; receptor.TipoDocumento = ventaInfo.TipoDocumentoReceptor; receptor.Ubigeo = ""; receptor.Urbanizacion = ""; _documento.Receptor = receptor; #endregion _documento.TipoDocumento = ventaInfo.TipoDocumento; _documento.TotalIgv = ventaInfo.TotalIgv; _documento.TotalIsc = 0; _documento.TotalOtrosTributos = 0; _documento.TotalVenta = ventaInfo.TotalVenta; #endregion string metodoApi; switch (_documento.TipoDocumento) { case "07": metodoApi = "api/GenerarNotaCredito"; break; case "08": metodoApi = "api/GenerarNotaDebito"; break; default: metodoApi = "api/GenerarFactura"; break; } var rutaPdfFactura = HostingEnvironment.MapPath("~/Archivos/Documentos/Cliente/" + ventaInfo.NroDocumentoReceptor + ""); #region Generando XML var client = new RestClient(BaseUrl); var requestInvoice = new RestRequest("GenerarFactura", Method.POST) { RequestFormat = DataFormat.Json }; requestInvoice.AddBody(_documento); var documentoResponse = client.Execute <DocumentoResponse>(requestInvoice); if (!documentoResponse.Data.Exito) { throw new ApplicationException(documentoResponse.Data.MensajeError); } // string rutaXml = HostingEnvironment.MapPath("~/Archivos/Facturacion/XML/" + _documento.IdDocumento + ".xml"); string rutaXml = HostingEnvironment.MapPath("~/Archivos/Documentos/Cliente") + "/" + ventaInfo.NroDocumentoReceptor; if (!Directory.Exists(rutaXml)) { Directory.CreateDirectory(rutaXml); } File.WriteAllBytes(rutaXml + "/" + _documento.IdDocumento + ".xml", Convert.FromBase64String(documentoResponse.Data.TramaXmlSinFirma)); #endregion #region Firma string rutaCertificado = HostingEnvironment.MapPath("~/Archivos/Facturacion/certificado.pfx"); var firmado = new FirmadoRequest { TramaXmlSinFirma = documentoResponse.Data.TramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes(rutaCertificado)), PasswordCertificado = "9dGxdmm5JHKwKsXc", UnSoloNodoExtension = false }; var requestFirma = new RestRequest("Firmar", Method.POST) { RequestFormat = DataFormat.Json }; requestFirma.AddBody(firmado); var responseFirma = client.Execute <FirmadoResponse>(requestFirma); if (!responseFirma.Data.Exito) { throw new ApplicationException(responseFirma.Data.MensajeError); } //string rutaXmlFirmado = HostingEnvironment.MapPath("~/Archivos/Facturacion/XML/Cliente/" + _documento.IdDocumento + "_Firmado.xml"); string rutaXmlFirmado = HostingEnvironment.MapPath("~/Archivos/Documentos/Cliente") + "/" + ventaInfo.NroDocumentoReceptor; if (!Directory.Exists(rutaXmlFirmado)) { Directory.CreateDirectory(rutaXmlFirmado); } File.WriteAllBytes(rutaXmlFirmado + "/" + _documento.IdDocumento + "_Firmado.xml", Convert.FromBase64String(responseFirma.Data.TramaXmlFirmado)); #endregion #region Impresión Comprobante var htmlToComprobante = new NReco.PdfGenerator.HtmlToPdfConverter(); var nombreArchivoComprobante = String.Empty; var comprobanteSB = new StringBuilder(); if (ventaInfo.TipoDocumento.Equals(Constantes.TipoComprobanteFactura)) { //comprobanteSB.Append(Herramientas.Helper.ObtenerTexto("~/Archivos/Plantillas/FacturaPowerGas.html")); comprobanteSB.Append(Herramientas.Helper.ObtenerTexto(PlantillaFactura)); #region Factura comprobanteSB.Replace("@EMPRESA_LOGO", HttpContext.Current.Server.MapPath(empresaInfo.Imagen)); comprobanteSB.Replace("@EMPRESA_NOMBRE", ventaInfo.NombreComercialEmisor); comprobanteSB.Replace("@EMPRESA_RUC", ventaInfo.NroDocumentoEmisor); comprobanteSB.Replace("@NUMEROCOMPROBANTE", ventaInfo.IdDocumento); comprobanteSB.Replace("@EMPRESA_DIRECCION", ventaInfo.DireccionEmisor); comprobanteSB.Replace("@EMPRESA_TELEFONO", String.Empty); comprobanteSB.Replace("@EMPRESA_FAX", String.Empty); comprobanteSB.Replace("@EMPRESA_PAIS", empresaInfo.Pais); comprobanteSB.Replace("@EMPRESA_DEPARTAMENTO", empresaInfo.Departamento); comprobanteSB.Replace("@EMPRESA_PROVINCIA", empresaInfo.Provincia); comprobanteSB.Replace("@EMPRESA_DISTRITO", empresaInfo.Distrito); comprobanteSB.Replace("@FECHAEMISION", ventaInfo.FechaEmision.ToString("dd/MM/yyyy")); comprobanteSB.Replace("@AGENCIA_DIRECCION", agenciaInfo.Direccion); //var clienteInfo = new Cliente().Listar(ventaInfo.ClienteId).FirstOrDefault(); comprobanteSB.Replace("@CLIENTE_NOMBRE", ventaInfo.NombreComercialReceptor); comprobanteSB.Replace("@CLIENTE_DIRECCION", ventaInfo.DireccionReceptor); comprobanteSB.Replace("@CLIENTE_DISTRITO", String.Empty); comprobanteSB.Replace("@CLIENTE_RUC", ventaInfo.NroDocumentoReceptor); comprobanteSB.Replace("@CLIENTE_CODIGO", String.Empty); comprobanteSB.Replace("@MONEDA", ventaInfo.Moneda); var facturaSBDetalle = new StringBuilder(""); facturaSBDetalle.Append("<table style=\"width: 100%; border-collapse: collapse;\">"); facturaSBDetalle.Append(" <thead>"); facturaSBDetalle.Append(" <tr>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">ITEM</td>"); facturaSBDetalle.Append(" <td style=\"width: 50%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">DESCRIPCIÓN</td>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">CANT</td>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">UND</td>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">VALOR UNIT</td>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">SUBTOTAL</td>"); facturaSBDetalle.Append(" </tr>"); facturaSBDetalle.Append(" </thead>"); var montoGravado = 0M; var montoImpuestoTotal = 0M; foreach (var vd in ventaGasolutionsDetalleInfoLista) { facturaSBDetalle.Append(" <tr>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + vd.CodigoItem + "</td>"); facturaSBDetalle.Append(" <td style=\"width: 50%; border: 1px none #0b44e9; text-align: left; vertical-align: top;\" class=\"Estilo8\">" + vd.Descripcion + "</td>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + ((vd.TotalVenta - vd.Impuesto) / vd.PrecioUnitario).ToString("N2") + "</td>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + vd.UnidadMedida + "</td>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + vd.PrecioUnitario.ToString("N2") + "</td>"); //facturaSBDetalle.Append(" <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + (vd.Cantidad * vd.PrecioUnitario).ToString("N2") + "</td>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + (vd.TotalVenta - vd.Impuesto).ToString("N2") + "</td>"); facturaSBDetalle.Append(" </tr>"); montoGravado = montoGravado + vd.TotalVenta; } facturaSBDetalle.Append("</table>"); var montoIgv = montoGravado * 0.18M; var montoTotal = montoGravado + montoIgv; comprobanteSB.Replace("@MONTO_GRAVADA", ventaInfo.Gravadas.ToString("N2")); comprobanteSB.Replace("@MONTO_INAFECTA", "0.00"); comprobanteSB.Replace("@MONTO_EXONERADA", "0.00"); comprobanteSB.Replace("@MONTO_GRATUITA", "0.00"); comprobanteSB.Replace("@MONTO_IGV", ventaInfo.TotalIgv.ToString("N2")); comprobanteSB.Replace("@MONTO_TOTAL", ventaInfo.TotalVenta.ToString("N2")); comprobanteSB.Replace("@PRODUCTO_DETALLE", facturaSBDetalle.ToString()); #endregion nombreArchivoComprobante = "Factura_" + DateTime.Now.ToString("ddMMyyyyhhmmss"); // + ".pdf"; } if (ventaInfo.TipoDocumento.Equals(Constantes.TipoComprobanteBoletaVenta)) { //comprobanteSB.Append(Herramientas.Helper.ObtenerTexto("~/Archivos/Plantillas/BoletaPowerGas.html")); comprobanteSB.Append(Herramientas.Helper.ObtenerTexto(PlantillaBoleta)); #region Boleta comprobanteSB.Replace("@EMPRESA_LOGO", HttpContext.Current.Server.MapPath(empresaInfo.Imagen)); comprobanteSB.Replace("@EMPRESA_NOMBRE", ventaInfo.NombreComercialEmisor); comprobanteSB.Replace("@EMPRESA_RUC", ventaInfo.NroDocumentoEmisor); comprobanteSB.Replace("@NUMEROCOMPROBANTE", ventaInfo.IdDocumento); comprobanteSB.Replace("@EMPRESA_DIRECCION", ventaInfo.DireccionEmisor); comprobanteSB.Replace("@EMPRESA_TELEFONO", String.Empty); comprobanteSB.Replace("@EMPRESA_FAX", String.Empty); comprobanteSB.Replace("@EMPRESA_PAIS", empresaInfo.Pais); comprobanteSB.Replace("@EMPRESA_DEPARTAMENTO", empresaInfo.Departamento); comprobanteSB.Replace("@EMPRESA_PROVINCIA", empresaInfo.Provincia); comprobanteSB.Replace("@EMPRESA_DISTRITO", empresaInfo.Distrito); comprobanteSB.Replace("@FECHAEMISION", ventaInfo.FechaEmision.ToString("dd/MM/yyyy")); comprobanteSB.Replace("@AGENCIA_DIRECCION", agenciaInfo.Direccion); //var clienteInfo = new Cliente().Listar(ventaInfo.ClienteId).FirstOrDefault(); comprobanteSB.Replace("@CLIENTE_NOMBRE", ventaInfo.NombreComercialReceptor); comprobanteSB.Replace("@CLIENTE_DIRECCION", ventaInfo.DireccionReceptor); comprobanteSB.Replace("@CLIENTE_DISTRITO", String.Empty); comprobanteSB.Replace("@CLIENTE_RUC", ventaInfo.NroDocumentoReceptor); comprobanteSB.Replace("@CLIENTE_CODIGO", String.Empty); comprobanteSB.Replace("@MONEDA", ventaInfo.Moneda); var facturaSBDetalle = new StringBuilder(""); facturaSBDetalle.Append("<table style=\"width: 100%; border-collapse: collapse;\">"); facturaSBDetalle.Append(" <thead>"); facturaSBDetalle.Append(" <tr>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">ITEM</td>"); facturaSBDetalle.Append(" <td style=\"width: 50%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">DESCRIPCIÓN</td>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">CANT</td>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">UND</td>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">VALOR UNIT</td>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">SUBTOTAL</td>"); facturaSBDetalle.Append(" </tr>"); facturaSBDetalle.Append(" </thead>"); var montoGravado = 0M; var montoImpuestoTotal = 0M; foreach (var vd in ventaGasolutionsDetalleInfoLista) { facturaSBDetalle.Append(" <tr>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + vd.CodigoItem + "</td>"); facturaSBDetalle.Append(" <td style=\"width: 50%; border: 1px none #0b44e9; text-align: left; vertical-align: top;\" class=\"Estilo8\">" + vd.Descripcion + "</td>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + ((vd.TotalVenta - vd.Impuesto) / vd.PrecioUnitario).ToString("N2") + "</td>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + vd.UnidadMedida + "</td>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + vd.PrecioUnitario.ToString("N2") + "</td>"); facturaSBDetalle.Append(" <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + (vd.TotalVenta - vd.Impuesto).ToString("N2") + "</td>"); facturaSBDetalle.Append(" </tr>"); montoGravado = montoGravado + vd.TotalVenta; } facturaSBDetalle.Append("</table>"); var montoIgv = montoGravado * 0.18M; var montoTotal = montoGravado + montoIgv; comprobanteSB.Replace("@MONTO_GRAVADA", ventaInfo.Gravadas.ToString("N2")); comprobanteSB.Replace("@MONTO_INAFECTA", "0.00"); comprobanteSB.Replace("@MONTO_EXONERADA", "0.00"); comprobanteSB.Replace("@MONTO_GRATUITA", "0.00"); comprobanteSB.Replace("@MONTO_IGV", ventaInfo.TotalIgv.ToString("N2")); comprobanteSB.Replace("@MONTO_TOTAL", ventaInfo.TotalVenta.ToString("N2")); comprobanteSB.Replace("@PRODUCTO_DETALLE", facturaSBDetalle.ToString()); #endregion nombreArchivoComprobante = "Boleta_" + DateTime.Now.ToString("ddMMyyyyhhmmss"); // + ".pdf"; } if (!Directory.Exists(rutaPdfFactura)) { Directory.CreateDirectory(rutaPdfFactura); } #region Codigo QR var codigoQR = ventaInfo.NroDocumentoReceptor + "|" + ventaInfo.TipoDocumento + "|" + ventaInfo.IdDocumento.Substring(0, 4) + "|" + ventaInfo.IdDocumento.Substring(5, ventaInfo.IdDocumento.Length - 5) + "|" + ventaInfo.TotalIgv + "|" + ventaInfo.TotalVenta + "|" + ventaInfo.FechaEmision + "|" + ventaInfo.TipoDocumentoReceptor + "|" + ventaInfo.NroDocumentoReceptor + "|" + responseFirma.Data.ResumenFirma + "|" + responseFirma.Data.ValorFirma; // instantiate a writer object var barcodeWriter = new BarcodeWriter(); // set the barcode format barcodeWriter.Format = BarcodeFormat.PDF_417; // write text and generate a 2-D barcode as a bitmap // barcodeWriter.Write(codigoQR).Save(@"C:\Users\jeremy\Desktop\generated.bmp"); //barcodeWriter.Write(codigoQR).Save(HostingEnvironment.MapPath("~/Archivos/Documentos/Cliente/" + ventaInfo.NumeroDocumentoCliente + "/" + _documento.IdDocumento + ".bmp")); barcodeWriter.Write(codigoQR).Save(rutaPdfFactura + "/" + _documento.IdDocumento + ".bmp"); #endregion comprobanteSB.Replace("@CODIGO_QR", HttpContext.Current.Server.MapPath("~/Archivos/Documentos/Cliente/" + ventaInfo.NroDocumentoReceptor + "/" + _documento.IdDocumento + ".bmp")); comprobanteSB.Replace("@MONTO_LETRAS", Herramientas.NumeroALetras.numeroAletras(ventaInfo.TotalVenta)); comprobanteSB = Herramientas.Helper.EncodeHtml(comprobanteSB); //var margins = new PageMargins(); //margins.Left = 1; //htmlToComprobante.Margins = margins; var pdfBytesFactura = htmlToComprobante.GeneratePdf(comprobanteSB.ToString()); // var comprobanteImpreso = rutaPdfFactura + "\\" + nombreArchivoComprobante + ".pdf"; File.WriteAllBytes(rutaPdfFactura + "/" + nombreArchivoComprobante + ".pdf", pdfBytesFactura); File.WriteAllBytes(rutaPdfFactura + "/" + nombreArchivoComprobante + ".xml", Convert.FromBase64String(responseFirma.Data.TramaXmlFirmado)); Negocio.Helper.ActualizarColumnasTabla("VentaGasolutions", new string[] { "ComprobanteImpreso" }, new string[] { nombreArchivoComprobante + ".pdf" }, new string[] { "VentaGasolutionsId" }, new string[] { ventaInfo.VentaGasolutionsId.ToString() }); #endregion mensaje = "El Comprobante se generó correctamente" + "@" + (nombreArchivoComprobante) + "@" + ventaInfo.NroDocumentoReceptor; } catch (Exception ex) { bool rethrow = ExceptionPolicy.HandleException(ex, Constantes.ExcepcionPoliticaPresentacion); mensaje = rethrow ? ex.Message : Constantes.ExcepcionPoliticaPresentacion; mensaje = (mensaje + "-" + ex.Source) + "@" + "" + "@" + ""; } return(mensaje); }
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); }
async Task <FirmadoResponse> ICertificador.FirmarXml(FirmadoRequest request) { return(await Task.Factory.StartNew(It.IsAny <FirmadoResponse>)); }
private static void CrearNotaCredito() { try { Console.WriteLine("Ejemplo Nota de Crédito de Factura"); var documento = new DocumentoElectronico { Emisor = CrearEmisor(), Receptor = new Contribuyente { NroDocumento = "20257471609", TipoDocumento = "6", NombreLegal = "FRAMEWORK PERU" }, IdDocumento = "FN11-001", FechaEmision = DateTime.Today.AddDays(-5).ToString(FormatoFecha), Moneda = "PEN", MontoEnLetras = "SON CINCO SOLES CON 0/100", CalculoIgv = 0.18m, CalculoIsc = 0.10m, CalculoDetraccion = 0.04m, TipoDocumento = "07", TotalIgv = 0.76m, TotalVenta = 5, Gravadas = 4.24m, Items = new List<DetalleDocumento> { new DetalleDocumento { Id = 1, Cantidad = 1, PrecioReferencial = 4.24m, PrecioUnitario = 4.24m, TipoPrecio = "01", CodigoItem = "2435675", Descripcion = "Correcion Factura", UnidadMedida = "NIU", Impuesto = 0.76m, TipoImpuesto = "10", // Gravada TotalVenta = 5, Suma = 5 } }, Discrepancias = new List<Discrepancia> { new Discrepancia { NroReferencia = "FF11-001", Tipo = "01", Descripcion = "Anulacion de la operacion" } }, Relacionados = new List<DocumentoRelacionado> { new DocumentoRelacionado { NroDocumento = "FF11-001", TipoDocumento = "01" } } }; Console.WriteLine("Generando XML...."); var documentoResponse = RestHelper<DocumentoElectronico, DocumentoResponse>.Execute("GenerarNotaCredito", documento); if (!documentoResponse.Exito) { throw new InvalidOperationException(documentoResponse.MensajeError); } Console.WriteLine("Firmando XML..."); // Firmado del Documento. var firmado = new FirmadoRequest { TramaXmlSinFirma = documentoResponse.TramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes("certificado.pfx")), PasswordCertificado = string.Empty, UnSoloNodoExtension = false }; var responseFirma = RestHelper<FirmadoRequest, FirmadoResponse>.Execute("Firmar", firmado); if (!responseFirma.Exito) { throw new InvalidOperationException(responseFirma.MensajeError); } File.WriteAllBytes("notacredito.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado)); Console.WriteLine("Enviando a SUNAT...."); var documentoRequest = new EnviarDocumentoRequest { Ruc = documento.Emisor.NroDocumento, UsuarioSol = "MODDATOS", ClaveSol = "MODDATOS", EndPointUrl = UrlSunat, IdDocumento = documento.IdDocumento, TipoDocumento = documento.TipoDocumento, TramaXmlFirmado = responseFirma.TramaXmlFirmado }; var enviarDocumentoResponse = RestHelper<EnviarDocumentoRequest, EnviarDocumentoResponse>.Execute("EnviarDocumento", documentoRequest); if (!enviarDocumentoResponse.Exito) { throw new InvalidOperationException(enviarDocumentoResponse.MensajeError); } File.WriteAllBytes("notacreditocdr.zip", Convert.FromBase64String(enviarDocumentoResponse.TramaZipCdr)); Console.WriteLine("Respuesta de SUNAT:"); Console.WriteLine(enviarDocumentoResponse.MensajeRespuesta); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { Console.ReadLine(); } }