public FirmadoResponse Post([FromBody] FirmadoRequest request) { var response = new FirmadoResponse(); try { var serializador = new Serializador { RutaCertificadoDigital = request.CertificadoDigital, PasswordCertificado = request.PasswordCertificado, TipoDocumento = request.UnSoloNodoExtension ? 0 : 1 }; response.TramaXmlFirmado = serializador.FirmarXml(request.TramaXmlSinFirma); response.ResumenFirma = serializador.DigestValue; response.ValorFirma = serializador.ValorFirma; response.Exito = true; } catch (Exception ex) { response.MensajeError = ex.Message; response.Pila = ex.StackTrace; response.Exito = false; } return(response); }
public async Task <EnviarResumenResponse> Generar(string organization, ComunicacionBaja model) { EmpresaModel empresa = await _repositoryempresa.Get(organization); model.IdDocumento = string.Format("RA-{0:yyyyMMdd}-001", DateTime.Today); model.FechaEmision = DateTime.Today.ToString(FormatoFecha); model.FechaReferencia = DateTime.Today.AddDays(-1).ToString(FormatoFecha); model.Emisor = HelperTo.ToEmisor(empresa); IEstructuraXml summary = _documentoXml.Generar(model); string XmlSinFirma = await _serializador.GenerarXml(summary); CertificadoDigitalModel certificado = await _repositorycert.GetCertificate(organization); FirmadoRequest firmado = HelperTo.ToSignedModel(certificado, XmlSinFirma, true); FirmadoResponse responseFirma = await _certificador.FirmarXml(firmado); ParametroEmpresaModel parametro = await _repositoryparam.GetConfiguration(certificado.Empresa); EnviarDocumentoRequest request = HelperTo.ToSendVoidedDocument(model, parametro, responseFirma); File.WriteAllBytes("voided.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado)); EnviarResumenResponse response = new EnviarResumenResponse(); var nombreArchivo = $"{request.Ruc}-{request.IdDocumento}"; var tramaZip = await _serializador.GenerarZip(request.TramaXmlFirmado, nombreArchivo); _servicioSunatDocumentos.Inicializar(new ParametrosConexion { Ruc = request.Ruc, UserName = request.UsuarioSol, Password = request.ClaveSol, EndPointUrl = request.EndPointUrl }); RespuestaAsincrono resultado = _servicioSunatDocumentos.EnviarResumen(new DocumentoSunat { NombreArchivo = $"{nombreArchivo}.zip", TramaXml = tramaZip }); if (resultado.Exito) { response.NroTicket = resultado.NumeroTicket; response.Exito = true; response.NombreArchivo = nombreArchivo; } else { response.MensajeError = resultado.MensajeError; response.Exito = false; } //guardar la respuesta return(response); }
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); }
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; }); }); }
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 string PostResumen(List <Data_Documentos> data_Documentos) { string mensajeRespuesta = string.Empty; try { GenerarResumenDiario generarResumenDiario = new GenerarResumenDiario(); ResumenDiario resumenDiario = generarResumenDiario.Data(data_Documentos); DocumentoResponse response = generarResumenDiario.Post(resumenDiario); if (!response.Exito) { Data_Log data_Log = new Data_Log() { DetalleError = response.MensajeError, Comentario = $"El XML con identificador: {resumenDiario.IdDocumento} no se pudo generar", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } else { string rutaArchivo = Path.Combine(data_Documentos[0].Ruta, $"{resumenDiario.IdDocumento}.xml"); Firmar firmar = new Firmar(); FirmadoRequest firmadoRequest = firmar.Data(data_Usuario.IdAccesosSunat, response.TramaXmlSinFirma); FirmadoResponse firmadoResponse = firmar.Post(firmadoRequest, true); // Ya se obtuvo el documento firmado if (firmadoResponse.Exito) // Comprobamos que se haya firmado de forma correcta { EnviarSunat enviarSunat = new EnviarSunat(); EnviarDocumentoRequest enviarDocumentoRequest = enviarSunat.Data(firmadoResponse.TramaXmlFirmado, data_Documentos[0], GetURL("03")); string nombreZip = $"{resumenDiario.Emisor.NroDocumento}-{resumenDiario.IdDocumento}"; EnviarResumenResponse enviarResumenResponse = enviarSunat.Post_Figurativo(enviarDocumentoRequest, nombreZip); if (enviarResumenResponse.Exito) // Comprobar envío a sunat { ConsultaConstanciaRequest consultaConstanciaRequest = new ConsultaConstanciaRequest() { Ruc = enviarDocumentoRequest.Ruc, UsuarioSol = enviarDocumentoRequest.UsuarioSol, ClaveSol = enviarDocumentoRequest.ClaveSol, EndPointUrl = " https://e-factura.sunat.gob.pe/ol-it-wsconscpegem/billConsultService" }; Consultar consultar = new Consultar(); EnviarDocumentoResponse enviarDocumentoResponse = consultar.Post_Constancia(consultaConstanciaRequest); if (enviarDocumentoResponse.Exito) { mensajeRespuesta = $"El resumen diario ha realizado con éxito, detalle: {enviarDocumentoResponse.MensajeRespuesta}"; } else { mensajeRespuesta = "El resumen diario ha realizado con éxito, pero hemos tenido inconvenietes al obtener" + " el CDR del documento: " + resumenDiario.IdDocumento + ", probablemente se este empleado el usuario MODDATOS," + "para obtener el CDR debes descargarlo de forma manual en la opción 'Consulta de CDR'"; data_Log = new Data_Log() { DetalleError = mensajeRespuesta, Comentario = $"Ha ocurrido un error al generar el CDR del resumen diario: {resumenDiario.IdDocumento}, probablemente se este empleado MODDATOS", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } Data_DocumentoFigurativo data_DocumentoFigurativo = new Data_DocumentoFigurativo() { XMLFirmado = firmadoResponse.TramaXmlFirmado, Tipo = "Resumen diario", ComentarioDocumento = mensajeRespuesta, Identificador = resumenDiario.IdDocumento, NumeroTicket = enviarResumenResponse.NroTicket, CdrSunat = enviarDocumentoResponse.TramaZipCdr ?? string.Empty }; if (!data_DocumentoFigurativo.Create_DocumentoFigurativo()) { data_Log = new Data_Log() { DetalleError = "Error inesperado en la base de datos", Comentario = "Ha ocurrido un error al guardar el registro del resumen diario", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } else { Data_DocumentoFigurativo dataUnion_DocumentoFigurativo; Data_Documentos updateDocumento; foreach (var data_Documento in data_Documentos) { dataUnion_DocumentoFigurativo = new Data_DocumentoFigurativo() { IdDocumentoFigurativo = data_DocumentoFigurativo.SCOPE_IDENTITY_VALUE, IdDocumento = data_Documento.IdDocumento }; if (!dataUnion_DocumentoFigurativo.Create_Figurativo_Documentos()) { data_Log = new Data_Log() { DetalleError = $"Detalle de tablas: Documentos {data_Documento.IdDocumento},{data_Documento.SerieCorrelativo} con la " + $"tabla Figurativo_Documentos {data_DocumentoFigurativo.SCOPE_IDENTITY_VALUE}, {data_DocumentoFigurativo.Identificador} ", Comentario = "Ha ocurrido un error al guardar el registro del resumen diario, en la tabla de unión", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } updateDocumento = new Data_Documentos() { IdDocumento = data_Documento.IdDocumento, EnviadoSunat = true, EstadoSunat = "Aceptado", ComentarioDocumento = $"El documento figura dentro del resumen diario con el código de identificación: {data_DocumentoFigurativo.Identificador}", ComunicacionBaja = false, }; if (!updateDocumento.Update_Documento()) { data_Log = new Data_Log() { DetalleError = $"No se ha podido actualizar el documento{data_Documento.IdDocumento}, {data_Documento.SerieCorrelativo} para indicar que resumen diario", Comentario = "Error en la base de datos", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } } } } else { mensajeRespuesta = enviarResumenResponse.MensajeError; data_Log = new Data_Log() { DetalleError = enviarResumenResponse.MensajeError, Comentario = "Error al crear resumen diario", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } } else { data_Log = new Data_Log() { DetalleError = response.MensajeError, Comentario = "Error al firmar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } } } catch (Exception ex) { var msg = string.Concat(ex.InnerException?.Message, ex.Message); data_Log = new Data_Log() { DetalleError = $"Detalle del error: {msg}", Comentario = "Error al procesar el envío del documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); mensajeRespuesta = $"Detalle del error: {msg}"; } return(mensajeRespuesta); }
public void Post(Data_Documentos IE_IdDocumento) // Ejecución { try { string IdDocumento = IE_IdDocumento.IdDocumento; Data_Documentos data_Documento = new Data_Documentos(IdDocumento); // IdDocumento variable global data_Documento.Read_Documento(); GenerarFactura generarFactura = new GenerarFactura(); GenerarNotaCredito generarNotaCredito = new GenerarNotaCredito(); GenerarNotaDebito generarNotaDebito = new GenerarNotaDebito(); DocumentoElectronico documento; DocumentoResponse response; switch (data_Documento.TipoDocumento) { case "01": // Factura y boletas documento = generarFactura.Data(data_Documento); response = generarFactura.Post(documento, true); break; case "07": // Nota de crédito documento = generarNotaCredito.data(data_Documento); response = generarNotaCredito.Post(documento, true); break; case "08": // Nota de Débito documento = generarNotaDebito.data(data_Documento); response = generarNotaDebito.Post(documento, true); break; default: documento = generarFactura.Data(data_Documento); response = generarFactura.Post(documento, true); break; } if (!response.Exito) { Data_Log data_Log = new Data_Log() { DetalleError = response.MensajeError, Comentario = $"El XML con serie correlativo: {documento.SerieCorrelativo} no se pudo generar", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } string rutaArchivo = Path.Combine(data_Documento.Ruta, $"{documento.SerieCorrelativo}.xml"); Firmar firmar = new Firmar(); FirmadoRequest firmadoRequest = firmar.Data(data_Usuario.IdAccesosSunat, response.TramaXmlSinFirma); //FirmadoResponse firmadoResponse = await firmar.Post(firmadoRequest); // Ya se obtuvo el documento firmado FirmadoResponse firmadoResponse = firmar.Post(firmadoRequest, true); // Ya se obtuvo el documento firmado if (firmadoResponse.Exito) // Comprobamos que se haya firmado de forma correcta { Data_Documentos actualizacionXML = new Data_Documentos(IdDocumento) { XmlFirmado = firmadoResponse.TramaXmlFirmado }; if (!actualizacionXML.Update_Documento_OneColumn("[dbo].[Update_Documento_SignedXML]")) { data_Log = new Data_Log() { DetalleError = "Error al actualizar el xmlFirmado del documento", Comentario = "Error con la base de datos", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } } else { data_Log = new Data_Log() { DetalleError = response.MensajeError, Comentario = "Error al firmar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } EnviarSunat enviarSunat = new EnviarSunat(); EnviarDocumentoRequest enviarDocumentoRequest = enviarSunat.Data(firmadoResponse.TramaXmlFirmado, data_Documento, GetURL(data_Documento.TipoDocumento)); // Obtenemos los datos para EnviarDocumentoRequest //EnviarDocumentoResponse enviarDocumentoResponse = await enviarSunat.Post_Documento(enviarDocumentoRequest); EnviarDocumentoResponse enviarDocumentoResponse = enviarSunat.Post_Documento(enviarDocumentoRequest, true); if (enviarDocumentoResponse.Exito && !string.IsNullOrEmpty(enviarDocumentoResponse.TramaZipCdr)) // Comprobar envío a sunat { Data_Documentos actualizacionCDR = new Data_Documentos() { IdDocumento = IdDocumento, CdrSunat = enviarDocumentoResponse.TramaZipCdr }; if (!actualizacionCDR.Update_Documento_OneColumn("[dbo].[Update_Documento_CDR]")) { data_Log = new Data_Log() { DetalleError = "Error al actualizar el CDR del documento", Comentario = "Error con la base de datos: [dbo].[Update_Documento_CDR]", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } Data_Documentos actualizacionComentario = new Data_Documentos() { IdDocumento = IdDocumento, ComentarioDocumento = enviarDocumentoResponse.MensajeRespuesta }; if (!actualizacionComentario.Update_Documento_OneColumn("[dbo].[Update_Documento_Comentario]")) { data_Log = new Data_Log() { DetalleError = "Error al guardar el comentario notificando la recepción del CDR del documento", Comentario = "No se pudo guardar el CDR", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } Data_Documentos actualizacionEstadoSunat = new Data_Documentos() { IdDocumento = IdDocumento, EstadoSunat = "Aceptado" }; if (!actualizacionEstadoSunat.Update_Documento_OneColumn("[dbo].[Update_Documento_EstadoSunat]")) { data_Log = new Data_Log() { DetalleError = "Error al guardar el comentario notificando el estado del documento", Comentario = "No se pudo guardar el estado del documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } } else { data_Log = new Data_Log() { DetalleError = enviarDocumentoResponse.MensajeError, Comentario = "Error al enviar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); Data_Documentos actualizacionComentario = new Data_Documentos() { IdDocumento = IdDocumento, ComentarioDocumento = enviarDocumentoResponse.MensajeError }; if (!actualizacionComentario.Update_Documento_OneColumn("[dbo].[Update_Documento_Comentario]")) { data_Log = new Data_Log() { DetalleError = "Error al guardar el comentario notificando el error al no poder recibir el CDR del documento", Comentario = "No se recibió el CDR", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } Data_Documentos actualizacionEstadoSunat = new Data_Documentos() { IdDocumento = IdDocumento, EstadoSunat = "Rechazado" }; if (!actualizacionEstadoSunat.Update_Documento_OneColumn("[dbo].[Update_Documento_EstadoSunat]")) { data_Log = new Data_Log() { DetalleError = "Error al guardar el comentario notificando el estado del documento", Comentario = "No se pudo guardar el estado del documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } } } catch (Exception ex) { var msg = string.Concat(ex.InnerException?.Message, ex.Message); data_Log = new Data_Log() { DetalleError = $"Detalle del error: {msg}", Comentario = "Error al procesar el envío del documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } }
private async void btnEjecutar_ConInterfaces_Click(object sender, RoutedEventArgs e) { try { Data_Documentos data_Documento = new Data_Documentos("20186C16-C1DC-4717-8F46-407447D225BC"); data_Documento.Read_Documento(); GenerarFactura generarFactura = new GenerarFactura(); DocumentoElectronico documento = generarFactura.data(data_Documento); // CAMBIAR A ASINCRONO AL FINALIZAR EL DESARROLLO var response = await generarFactura.Post(documento); if (!response.Exito) { System.Windows.MessageBox.Show($"A ocurrido un error en la generación de XML: {response.MensajeError}"); } string rutaArchivo = Path.Combine(data_Documento.Ruta, $"{documento.SerieCorrelativo}.xml"); Firmar firmar = new Firmar(); FirmadoRequest firmadoRequest = firmar.Data(data_Documento.IdEmisor, response.TramaXmlSinFirma); FirmadoResponse firmadoResponse = await firmar.Post(firmadoRequest); // Ya se obtuvo el documento firmado if (firmadoResponse.Exito) // Comprobamos que se haya firmado de forma correcta { File.WriteAllBytes(rutaArchivo, Convert.FromBase64String(firmadoResponse.TramaXmlFirmado)); } else { System.Windows.MessageBox.Show($"A ocurrido un error al firmar el XML: {response.MensajeError}"); } EnviarSunat enviarSunat = new EnviarSunat(); EnviarDocumentoRequest enviarDocumentoRequest = enviarSunat.Data(firmadoResponse.TramaXmlFirmado, data_Documento, "urlsunat"); // Obtenemos los datos para EnviarDocumentoRequest EnviarDocumentoResponse enviarDocumentoResponse = await enviarSunat.Post_Documento(enviarDocumentoRequest); // enviarDocumentoResponse = jsonEnvioDocumento ; respuestaComunConArchivo = respuestaEnvio System.Windows.MessageBox.Show(enviarDocumentoResponse.MensajeRespuesta); // Temporal para pruebas if (enviarDocumentoResponse.Exito && !string.IsNullOrEmpty(enviarDocumentoResponse.TramaZipCdr)) // Comprobar envío a sunat { if (!Directory.Exists($"{data_Documento.Ruta}\\{enviarDocumentoResponse.NombreArchivo}")) { Directory.CreateDirectory($"{data_Documento.Ruta}\\{enviarDocumentoResponse.NombreArchivo}"); } File.WriteAllBytes($"{data_Documento.Ruta}\\{enviarDocumentoResponse.NombreArchivo}\\{enviarDocumentoResponse.NombreArchivo}.xml", Convert.FromBase64String(firmadoResponse.TramaXmlFirmado)); if (!Directory.Exists($"{data_Documento.Ruta}\\{enviarDocumentoResponse.NombreArchivo}\\CDR")) { Directory.CreateDirectory($"{data_Documento.Ruta}\\{enviarDocumentoResponse.NombreArchivo}\\CDR"); } File.WriteAllBytes($"{data_Documento.Ruta}\\{enviarDocumentoResponse.NombreArchivo}\\CDR\\R-{enviarDocumentoResponse.NombreArchivo}.zip", Convert.FromBase64String(enviarDocumentoResponse.TramaZipCdr)); } } catch (Exception ex) { System.Windows.MessageBox.Show($"A ocurrido un error: {ex}"); } }
public static EnviarDocumentoRequest ToSendPerceptionDocument(DocumentoPercepcion model, ParametroEmpresaModel parametro, FirmadoResponse responseFirma) { EnviarDocumentoRequest request = new EnviarDocumentoRequest(); request.Ruc = model.Emisor.NroDocumento; request.UsuarioSol = parametro.UsuarioSol; request.ClaveSol = parametro.ClaveSol; request.EndPointUrl = ""; request.IdDocumento = model.IdDocumento; request.TipoDocumento = "40"; request.TramaXmlFirmado = responseFirma.TramaXmlFirmado; return(request); }
public static EnviarDocumentoRequest ToSendSummaryDocument(ResumenDiarioNuevo model, ParametroEmpresaModel parametro, FirmadoResponse responseFirma) { EnviarDocumentoRequest request = new EnviarDocumentoRequest(); request.Ruc = model.Emisor.NroDocumento; request.UsuarioSol = parametro.UsuarioSol; request.ClaveSol = parametro.ClaveSol; request.EndPointUrl = ""; request.IdDocumento = model.IdDocumento; //request.TipoDocumento = model.TipoDocumento; request.TramaXmlFirmado = responseFirma.TramaXmlFirmado; return(request); }
private void btnImprimirVenta_Click(object sender, EventArgs e) { try { if (string.IsNullOrEmpty(this.txtIDCliente.Text)) { MessageBox.Show("Error: Debe seleccionar un cliente."); return; } decimal ventaSoles = decimal.Parse((string.IsNullOrEmpty(this.txtVentaSoles.Text) ? "0.00" : this.txtVentaSoles.Text)); decimal pagoSoles = decimal.Parse((string.IsNullOrEmpty(this.txtPagoSoles.Text) ? "0.00" : this.txtPagoSoles.Text)); if (ventaSoles > pagoSoles) { MessageBox.Show("Monto pago es insuficiente."); } else { var documento = new DocumentoElectronico { Emisor = CrearEmisor(), Receptor = new Contribuyente { NroDocumento = "20100039207", TipoDocumento = "6", NombreLegal = "RANSA COMERCIAL S.A.", Email = "*****@*****.**" }, IdDocumento = "", FechaEmision = dtpFechaHora.Value.ToShortDateString(), Moneda = "PEN", MontoEnLetras = enletras(txtVentaSoles.Text), //"SON CIENTO DIECIOCHO SOLES CON 0/100", CalculoIgv = 0.18m, CalculoIsc = 0.10m, CalculoDetraccion = 0.04m, TipoDocumento = cboFacturaBoleta.SelectedValue.ToString(), TotalIgv = 18, TotalVenta = 118, Gravadas = 100 }; foreach (DataGridViewRow row in grvDetalleVenta.Rows) { documento.Items.Add(new DetalleDocumento { IdDocumento = documento.IdDocumento, //+ i.ToString().PadLeft(8, char.Parse("0")), Id = row.Index + 1, Cantidad = decimal.Parse(row.Cells["Cantidad"].Value.ToString()), PrecioReferencial = decimal.Parse(row.Cells["PUnit"].Value.ToString()), PrecioUnitario = decimal.Parse(row.Cells["PUnit"].Value.ToString()), TipoPrecio = "01", CodigoItem = row.Cells["CodProd"].Value.ToString(), Descripcion = row.Cells["Descripcion"].Value.ToString(), UnidadMedida = row.Cells["UnidMed"].Value.ToString(), Impuesto = 18, TipoImpuesto = (row.Cells["FlgAfectoIGV"].Value.ToString() == "1") ? "10" : "30",// Gravada TotalVenta = decimal.Parse(row.Cells["TotaItem"].Value.ToString()), Suma = decimal.Parse(row.Cells["TotaItem"].Value.ToString()), }); } FirmadoResponse response = FirmadoCPE.Generar(documento); var resumentFirma = response.ResumenFirma; var firma = response.ValorFirma; var mensajeError = response.MensajeError; BE_Comprobante pBE_ComprobanteTMP = new BE_Comprobante() { ID = 0, Str_Tipo_Comprobante = documento.TipoDocumento, Str_Serie_Comprobante = "", Str_Numero_Comprobante = "", Str_Num_Documento_Cliente = documento.Receptor.NroDocumento, Str_Fecha_Hora_Comprobante = documento.FechaEmision, Str_Placa_Comprobante = txtPlaca.Text, Str_Linea_Cred_Soles_Comprobante = txtLineaCredSoles.Text, Str_Cod_Operador = this.txtCodOperador.Text, Str_Cod_Turno = this.txtCodTurno.Text, Str_Tarjeta_Soles_Comprobante = this.txtTarjetaSoles.Text, Str_Linea_Cred_Comprobante = this.txtUsarLineaCred.Text, //Dec_Total_Gravado_Comprobante = decimal.Parse(txtSTGravado.Text), Dec_Total_Gravado_Comprobante = decimal.Parse((string.IsNullOrEmpty(this.txtSTGravado.Text) ? "0.00" : this.txtSTGravado.Text)), Dec_Total_Gratuito_Comprobante = 0, //Dec_Total_Inafecto_Comprobante = decimal.Parse(txtSTInafecto.Text), Dec_Total_Inafecto_Comprobante = decimal.Parse((string.IsNullOrEmpty(this.txtSTInafecto.Text) ? "0.00" : this.txtSTInafecto.Text)), Dec_Total_Exonerado_Comprobante = 0, Dec_Dscnto_Global_Comprobante = 0, //Dec_Total_Venta_Soles_Comprobante = decimal.Parse(txtVentaSoles.Text), Dec_Total_Venta_Soles_Comprobante = decimal.Parse((string.IsNullOrEmpty(this.txtVentaSoles.Text) ? "0.00" : this.txtVentaSoles.Text)), Dec_Total_Igv_Soles_Comprobante = 0, Dec_Total_Isc_Soles_Comprobante = 0, //Dec_Efectivo_Soles_Comprobante = decimal.Parse(txtEfectivoSoles.Text), Dec_Efectivo_Soles_Comprobante = decimal.Parse((string.IsNullOrEmpty(this.txtEfectivoSoles.Text) ? "0.00" : this.txtEfectivoSoles.Text)), //Dec_Tipo_Cambio_Comprobante = decimal.Parse(txtTipoCambio.Text), Dec_Tipo_Cambio_Comprobante = decimal.Parse((string.IsNullOrEmpty(this.txtTipoCambio.Text) ? "0.00" : this.txtTipoCambio.Text)), //Dec_Efectivo_Dolares_Comprobante = decimal.Parse(txtEfectivoDolares.Text), Dec_Efectivo_Dolares_Comprobante = decimal.Parse((string.IsNullOrEmpty(this.txtEfectivoDolares.Text) ? "0.00" : this.txtEfectivoDolares.Text)), //Dec_Pago_Comprobante = decimal.Parse(txtPagoSoles.Text), Dec_Pago_Comprobante = decimal.Parse((string.IsNullOrEmpty(this.txtPagoSoles.Text) ? "0.00" : this.txtPagoSoles.Text)), //Dec_Vuelto_Comprobante = decimal.Parse(txtVueltoSoles.Text), Dec_Vuelto_Comprobante = decimal.Parse((string.IsNullOrEmpty(this.txtVueltoSoles.Text) ? "0.00" : this.txtVueltoSoles.Text)), Str_Monto_Letras_Comprobante = documento.MontoEnLetras, Str_Hash_Comprobante = resumentFirma, Str_MsjRpta_Comprobante = mensajeError, IDUsuarioCreacion = VariablesGlobales.operador_actual.ID }; pBE_ComprobanteTMP.Listado_Detalle = new List <BE_Comprobante_Detalle>(); foreach (DataGridViewRow row in grvDetalleVenta.Rows) { pBE_ComprobanteTMP.Listado_Detalle.Add(new BE_Comprobante_Detalle() { Str_Cod_Isla = row.Cells["Isla"].Value.ToString(), Str_Cod_Surtidor = row.Cells["Surtidor"].Value.ToString(), Str_Cod_Lados = row.Cells["Cara"].Value.ToString(), Str_Cod_Manguera = row.Cells["Manguera"].Value.ToString(), Str_Cod_Producto = row.Cells["Cara"].Value.ToString(), Dec_Precio_Unitario_DComprobante = decimal.Parse(row.Cells["PUnit"].Value.ToString()), Dec_Cantidad_DComprobante = decimal.Parse(row.Cells["Cantidad"].Value.ToString()), Dec_SubTotal_Gravado_DComprobante = decimal.Parse(row.Cells["STGravado"].Value.ToString()), Dec_SubTotal_Inafecto_DComprobante = decimal.Parse(row.Cells["STInafecto"].Value.ToString()), Dec_SubTotal_Gratuito_DComprobante = 0, Dec_SubTotal_Exonerado_DComprobante = 0, Dec_SubTotal_Item_DComprobante = decimal.Parse(row.Cells["TotaItem"].Value.ToString()), Int_Flg_Agecto_IGV = int.Parse(row.Cells["FlgAfectoIGV"].Value.ToString()), Dec_IGV_Item_DComprobante = decimal.Parse(row.Cells["IGVUnit"].Value.ToString()), Int_Flg_Agecto_ISC = int.Parse(row.Cells["FlgAfectoISC"].Value.ToString()), Dec_ISC_Item_DComprobante = decimal.Parse(row.Cells["ISCUnit"].Value.ToString()), IDUsuarioCreacion = VariablesGlobales.operador_actual.ID }); } int id = BL_Comprobante.Registrar_Comprobante(pBE_ComprobanteTMP); if (id > 0) { if (string.IsNullOrEmpty(GestionCombustibles.Properties.Settings.Default.PrinterPath)) { MessageBox.Show("No hay una impresora configurada."); } else { string xNumComprobante = txtSerieNumero.Text; string xFecha = dtpFechaHora.Value.Day.ToString().PadLeft(2, char.Parse("0")) + "-" + dtpFechaHora.Value.Month.ToString().PadLeft(2, char.Parse("0")) + "-" + dtpFechaHora.Value.Year.ToString().PadLeft(2, char.Parse("0")) + " " + dtpFechaHora.Value.Hour.ToString().PadLeft(2, char.Parse("0")) + ":" + dtpFechaHora.Value.Minute.ToString().PadLeft(2, char.Parse("0")) + ":" + dtpFechaHora.Value.Second.ToString().PadLeft(2, char.Parse("0")); string xSurtidor = cboSurtidor.SelectedValue.ToString(); string xLado = cboCara.SelectedValue.ToString(); string xCodHash = txtCodHash.Text; string xPlaca = txtPlaca.Text; // decimal xTotal = Convert.ToDecimal("00"); decimal xTotal_gravado = Convert.ToDecimal("00"); decimal xTotal_inafecto = Convert.ToDecimal("00"); decimal xTotal_igv = Convert.ToDecimal("00"); decimal xTotal_exonerado = Convert.ToDecimal("00"); decimal xTotal_isc = Convert.ToDecimal("00"); // List <string> xHeader = new List <string>(); xHeader.Add((string.IsNullOrEmpty(VariablesGlobales.empresa.Str_nom_empresa) ? "" : VariablesGlobales.empresa.Str_nom_empresa) + "\n"); xHeader.Add((string.IsNullOrEmpty(VariablesGlobales.empresa.Str_direccion_empresa) ? "" : VariablesGlobales.empresa.Str_direccion_empresa)); xHeader.Add((string.IsNullOrEmpty(VariablesGlobales.empresa.Str_Nom_Distrito) ? "" : VariablesGlobales.empresa.Str_Nom_Distrito) + ", " + (string.IsNullOrEmpty(VariablesGlobales.empresa.Str_Nom_Provincia) ? "" : VariablesGlobales.empresa.Str_Nom_Provincia) + ", " + (string.IsNullOrEmpty(VariablesGlobales.empresa.Str_Nom_Departamento) ? "" : VariablesGlobales.empresa.Str_Nom_Departamento) + "\n"); xHeader.Add("RUC " + (string.IsNullOrEmpty(VariablesGlobales.empresa.Str_num_documento) ? "" : VariablesGlobales.empresa.Str_num_documento) + "\n"); xHeader.Add("----------------------------------------\n"); xHeader.Add("BOLETA DE VENTA ELECTRONICA\n"); xHeader.Add(" " + xNumComprobante + "\n"); xHeader.Add(" " + xFecha + "\n"); xHeader.Add("----------------------------------------\n"); xHeader.Add("POS :" + xSurtidor + " LADO: " + xLado + "\n"); xHeader.Add("----------------------------------------\n"); List <string> xFooter = new List <string>(); xFooter.Add("----------------------------------------\n"); xFooter.Add("Placa del Vehiculo: " + xPlaca + "\n"); xFooter.Add("Cod Has: " + xCodHash + "\n"); xFooter.Add("Autorizado mediante\n"); xFooter.Add("Resolucion Nro.034-005-0006616/SUNAT \n"); xFooter.Add("RUC 20519069262 BOLETA de Venta\n"); xFooter.Add("Electronica, para consultar el\n"); xFooter.Add("documento ingrese a www.facturas.com.pe\n"); xFooter.Add("----------------------------------------\n"); xFooter.Add("*** GRACIAS POR SU COMPRA ***\n"); // List <string> xCodigo = new List <string>(); List <string> xProducto = new List <string>(); List <string> xValor = new List <string>(); List <string> xCant = new List <string>(); List <string> xUM = new List <string>(); ////////// cargar los datos de los productos a facturar ////////xCodigo.Add("GH90"); ////////xProducto.Add("GASOLINA90"); ////////xCant.Add("1.925"); ////////xUM.Add("GLN"); ////////xValor.Add("20.00"); ////////// ////////// cargar los datos de los productos a facturar ////////xCodigo.Add("AG01"); ////////xProducto.Add("CIELO 250ML"); ////////xCant.Add("1"); ////////xUM.Add("UND"); ////////xValor.Add("1.50"); ////////// foreach (DataGridViewRow row in grvDetalleVenta.Rows) { xCodigo.Add(row.Cells[5].Value.ToString()); xProducto.Add(row.Cells[6].Value.ToString()); xCant.Add(row.Cells[8].Value.ToString()); xUM.Add("GLN"); xValor.Add(row.Cells[9].Value.ToString()); } PrinterUtility.EscPosEpsonCommands.EscPosEpson obj = new PrinterUtility.EscPosEpsonCommands.EscPosEpson(); var BytesValue = Encoding.ASCII.GetBytes(string.Empty); BytesValue = PrintExtensions.AddBytes(BytesValue, obj.Alignment.Center()); // // IMPRIMIENDO ENCABEZADO // for (int i = 0; i < xHeader.Count; i++) { BytesValue = PrintExtensions.AddBytes(BytesValue, Encoding.ASCII.GetBytes(xHeader[i])); } BytesValue = PrintExtensions.AddBytes(BytesValue, obj.CharSize.Nomarl()); // IMPRIMIENDO DETALLES // for (int i = 0; i < xCodigo.Count; i++) { string xC = xCodigo[i]; string xP = xProducto[i]; string xQ = xCant[i]; string xU = xUM[i]; string xV = xValor[i]; xTotal = xTotal + Convert.ToDecimal(xV); string linea = Der(xC, 8) + Der(xP, 12) + Izq(xQ, 8) + Der(xU, 4) + Izq(xV, 8) + "\n"; BytesValue = PrintExtensions.AddBytes(BytesValue, Encoding.ASCII.GetBytes(linea)); } BytesValue = PrintExtensions.AddBytes(BytesValue, obj.CharSize.Nomarl()); BytesValue = PrintExtensions.AddBytes(BytesValue, Encoding.ASCII.GetBytes("----------------------------------------\n")); BytesValue = PrintExtensions.AddBytes(BytesValue, string.Format("{0,-20}{1,10}{2,10:N2}\n", "TOTAL", "", xTotal)); BytesValue = PrintExtensions.AddBytes(BytesValue, string.Format("{0,-20}{2,10}{3,10:N2}\n", "OP.GRAVADA", "", "", xTotal_gravado)); BytesValue = PrintExtensions.AddBytes(BytesValue, string.Format("{0,-20}{2,10}{3,10:N2}\n", "OP.INAFECTA", "", "", xTotal_inafecto)); BytesValue = PrintExtensions.AddBytes(BytesValue, string.Format("{0,-20}{2,10}{3,10:N2}\n", "IGV (18.00%)", "", "", xTotal_igv)); BytesValue = PrintExtensions.AddBytes(BytesValue, string.Format("{0,-20}{2,10}{3,10:N2}\n", "OP.EXONERADA", "", "", xTotal_exonerado)); BytesValue = PrintExtensions.AddBytes(BytesValue, string.Format("{0,-20}{2,10}{3,10:N2}\n", "I.S.C.", "", "", xTotal_isc)); BytesValue = PrintExtensions.AddBytes(BytesValue, string.Format("{0,-20}{2,10}{3,10:N2}\n", "IMPORTE TOTAL", "", "", xTotal)); BytesValue = PrintExtensions.AddBytes(BytesValue, Encoding.ASCII.GetBytes("Conserve su comprobante\n")); // IMPRESION DE PIE DE COMPROBANTE // for (int i = 0; i < xFooter.Count; i++) { BytesValue = PrintExtensions.AddBytes(BytesValue, Encoding.ASCII.GetBytes(xFooter[i])); } BytesValue = PrintExtensions.AddBytes(BytesValue, Encoding.ASCII.GetBytes("\n")); BytesValue = PrintExtensions.AddBytes(BytesValue, VariablesGlobales.empresa.Str_texto); BytesValue = PrintExtensions.AddBytes(BytesValue, Encoding.ASCII.GetBytes("\n")); BytesValue = PrintExtensions.AddBytes(BytesValue, CutPage()); PrinterUtility.PrintExtensions.Print(BytesValue, GestionCombustibles.Properties.Settings.Default.PrinterPath); // COMO HABILITAR LA IMPRESORA: // configurar una impresora Generic/Txt apuntando a puerto FILE, renombrarla y compartirla como TMU220 // en Settings: crear una clave PrinterPath \\\\<nombre de esta pc>\\TMU220 // ejemplo : \\\\DEVELOPER_01\\TMU220 // // FIN DE IMPRESION } Descartar(); } else { MessageBox.Show("Ocurrió un error al registrar la operación."); } } } catch (Exception ex) { MessageBox.Show("ERROR:" + ex.ToString()); } }
public async void Post(Data_Documentos IE_IdDocumento) { //var task = Task.Factory.StartNew(async () => //{ try { string IdDocumento = IE_IdDocumento.IdDocumento; // var taskfactory etc etc pero para despues "20186C16-C1DC-4717-8F46-407447D225BC" Data_Documentos data_Documento = new Data_Documentos(IdDocumento); // IdDocumento variable global data_Documento.Read_Documento(); GenerarFactura generarFactura = new GenerarFactura(); DocumentoElectronico documento = generarFactura.data(data_Documento); // CAMBIAR A ASINCRONO AL FINALIZAR EL DESARROLLO\ var response = await generarFactura.Post(documento); //await if (!response.Exito) { Data_Log data_Log = new Data_Log() { DetalleError = response.MensajeError, Comentario = $"El XML con serie correlativo: {documento.SerieCorrelativo} no se pudo generar", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } string rutaArchivo = Path.Combine(data_Documento.Ruta, $"{documento.SerieCorrelativo}.xml"); Firmar firmar = new Firmar(); FirmadoRequest firmadoRequest = firmar.Data(data_Documento.IdEmisor, response.TramaXmlSinFirma); FirmadoResponse firmadoResponse = await firmar.Post(firmadoRequest); // Ya se obtuvo el documento firmado if (firmadoResponse.Exito) // Comprobamos que se haya firmado de forma correcta { Data_Documentos actualizacionXML = new Data_Documentos(IdDocumento) { XmlFirmado = firmadoResponse.TramaXmlFirmado }; if (!actualizacionXML.Update_Documento_OneColumn("[dbo].[Update_Documento_SignedXML]")) { data_Log = new Data_Log() { DetalleError = "Error al actualizar el xmlFirmado del documento", Comentario = "Error con la base de datos", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } } else { data_Log = new Data_Log() { DetalleError = response.MensajeError, Comentario = "Error al firmar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } EnviarSunat enviarSunat = new EnviarSunat(); EnviarDocumentoRequest enviarDocumentoRequest = enviarSunat.Data(firmadoResponse.TramaXmlFirmado, data_Documento, GetURL(data_Documento.TipoDocumento)); // Obtenemos los datos para EnviarDocumentoRequest EnviarDocumentoResponse enviarDocumentoResponse = await enviarSunat.Post_Documento(enviarDocumentoRequest); if (enviarDocumentoResponse.Exito && !string.IsNullOrEmpty(enviarDocumentoResponse.TramaZipCdr)) // Comprobar envío a sunat { Data_Documentos actualizacionCDR = new Data_Documentos() { IdDocumento = IdDocumento, CdrSunat = enviarDocumentoResponse.TramaZipCdr }; if (!actualizacionCDR.Update_Documento_OneColumn("[dbo].[Update_Documento_CDR]")) { data_Log = new Data_Log() { DetalleError = "Error al actualizar el CDR del documento", Comentario = "Error con la base de datos: [dbo].[Update_Documento_CDR]", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } Data_Documentos actualizacionComentario = new Data_Documentos() { IdDocumento = IdDocumento, ComentarioDocumento = enviarDocumentoResponse.MensajeRespuesta }; if (!actualizacionComentario.Update_Documento_OneColumn("[dbo].[Update_Documento_Comentario]")) { data_Log = new Data_Log() { DetalleError = "Error al guardar el comentario notificando la recepción del CDR del documento", Comentario = "No se pudo guardar el CDR", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } Data_Documentos actualizacionEstadoSunat = new Data_Documentos() { IdDocumento = IdDocumento, EstadoSunat = "Aceptado" }; if (!actualizacionEstadoSunat.Update_Documento_OneColumn("[dbo].[Update_Documento_EstadoSunat]")) { data_Log = new Data_Log() { DetalleError = "Error al guardar el comentario notificando el estado del documento", Comentario = "No se pudo guardar el estado del documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } } else { data_Log = new Data_Log() { DetalleError = enviarDocumentoResponse.MensajeError, Comentario = "Error al enviar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); Data_Documentos actualizacionComentario = new Data_Documentos() { IdDocumento = IdDocumento, ComentarioDocumento = enviarDocumentoResponse.MensajeError }; if (!actualizacionComentario.Update_Documento_OneColumn("[dbo].[Update_Documento_Comentario]")) { data_Log = new Data_Log() { DetalleError = "Error al guardar el comentario notificando el error al no poder recibir el CDR del documento", Comentario = "No se recibió el CDR", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } Data_Documentos actualizacionEstadoSunat = new Data_Documentos() { IdDocumento = IdDocumento, EstadoSunat = "Rechazado" }; if (!actualizacionEstadoSunat.Update_Documento_OneColumn("[dbo].[Update_Documento_EstadoSunat]")) { data_Log = new Data_Log() { DetalleError = "Error al guardar el comentario notificando el estado del documento", Comentario = "No se pudo guardar el estado del documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } } } catch (Exception ex) { var msg = string.Concat(ex.InnerException?.Message, ex.Message); data_Log = new Data_Log() { DetalleError = $"Detalle del error: {msg}", Comentario = "Error al procesar el envío del documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } //}); //return task; }