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 <IActionResult> Put(string organization, int id, [FromBody] ComunicacionBaja model) { try { return(Ok(await _service.Put(organization, model))); } catch (Exception ex) { throw new SuperFactException(ex.Message, ex.InnerException); } }
private async void CrearXmlBajas() { try { vFechaXml = "RA-" + Convert.ToString(DtpFechaEnvioDoc.Value.Year); vFechaXml += ModFunc.Derecha("0" + Convert.ToString(DtpFechaEnvioDoc.Value.Month), 2); vFechaXml += ModFunc.Derecha("0" + Convert.ToString(DtpFechaEnvioDoc.Value.Day), 2); vFechaXml += "-012"; ComunicacionBaja ComunicacionBaja = new ComunicacionBaja { IdDocumento = vFechaXml, FechaEmision = DtpFechaEnvioDoc.Value.ToString(FormatoFecha), FechaReferencia = DtpFechaEnvioDoc.Value.ToString(FormatoFecha), Emisor = CrearEmisor(DtEmpresa), Bajas = new List <DocumentoBaja>() }; for (int i3 = 0; i3 <= DtDocumentos.Rows.Count - 1; i3++) { DocumentoBaja DocumentoBajasItem = new DocumentoBaja { Id = i3 + 1, Correlativo = Convert.ToString(DtDocumentos.Rows[i3]["NumeroDocumento"]), TipoDocumento = Convert.ToString(DtDocumentos.Rows[i3]["TipoDocumento"]), Serie = Convert.ToString(DtDocumentos.Rows[i3]["SerieDocumento"]), MotivoBaja = "Anulación por otro tipo de documento" }; ComunicacionBaja.Bajas.Add(DocumentoBajasItem); } string _metodoApi = "api/GenerarComunicacionBaja"; var response = await _client.PostAsJsonAsync(_metodoApi, ComunicacionBaja); var respuesta = await response.Content.ReadAsAsync <DocumentoResponse>(); if (!respuesta.Exito) { throw new ApplicationException(respuesta.MensajeError); } vArchivoXML = ComunicacionBaja.IdDocumento; vArchivoXML = Path.Combine(vRutaXml, $"{vArchivoXML}.xml"); File.WriteAllBytes(vArchivoXML, Convert.FromBase64String(respuesta.TramaXmlSinFirma)); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public static EnviarDocumentoRequest ToSendVoidedDocument(ComunicacionBaja 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); }
public async Task <IActionResult> Post(string organization, [FromBody] ComunicacionBaja model) { EnviarResumenResponse response = new EnviarResumenResponse(); try { response = await _service.Generar(organization, model); response.Exito = true; return(Ok(response)); } catch (Exception ex) { throw new SuperFactException(ex.Message, ex.InnerException); } }
public DocumentoResponse Post(ComunicacionBaja baja) { var response = new DocumentoResponse(); try { var voidedDocument = _documentoXml.Generar(baja); response.TramaXmlSinFirma = _serializador.GenerarXml(voidedDocument, true); response.Exito = true; } catch (Exception ex) { response.MensajeError = ex.Message; response.Pila = ex.StackTrace; response.Exito = false; } return(response); }
private void btnEnviarFactura_Click(object sender, EventArgs e) { Factura documento = new Factura(); documento.NroSerie = "F001"; documento.NroDocumento = "000001"; Factura documento2 = new Factura(); documento2 = documento; documento2.NroSerie = "F002"; MessageBox.Show(documento2.EnviarDocumento()); var boleta = new Boleta(); boleta.NroSerie = "B001"; boleta.NroDocumento = "0000003"; MessageBox.Show(boleta.EnviarDocumento()); var baja = new ComunicacionBaja(); baja.NroSerie = "B001"; baja.NroDocumento = "0000003"; MessageBox.Show(baja.EnviarDocumento()); IDocumento documentoGenerico = new Boleta(); MessageBox.Show(documentoGenerico.EnviarDocumento());; IDocumento documentoGenerico2 = new ComunicacionBaja(); MessageBox.Show(documentoGenerico2.EnviarDocumento()); /* * documento.NroSerie es igual a F002---> * * documento2.NroSerie es igual a F002--->7 * */ }
public DocumentoResponse Post([FromBody] ComunicacionBaja baja) { var response = new DocumentoResponse(); try { var voidedDocument = Generador.GenerarVoidedDocuments(baja); var serializador = new Serializador(); response.TramaXmlSinFirma = serializador.GenerarXml(voidedDocument); response.Exito = true; } catch (Exception ex) { response.MensajeError = ex.Message; response.Pila = ex.StackTrace; response.Exito = false; } return(response); }
public ComunicacionBaja data(List <Data_Documentos> data_Documentos) { Data_Contribuyente data_Emisor = new Data_Contribuyente(data_Documentos[0].IdEmisor); data_Emisor.Read_Contribuyente(); ReadGeneralData readGeneralData = new ReadGeneralData(); DateTime dateTime = DateTime.Now; int numeracion = 0; string mes = dateTime.Month < 10 ? $"0{dateTime.Month}" : dateTime.Month.ToString(); string dia = dateTime.Day < 10 ? $"0{dateTime.Day}" : dateTime.Day.ToString(); int numeradorLinea = 1; numeracion = readGeneralData.GetScalarValueINT("[dbo].[Query_Scalar_GetValue_CantidadDocsDia]", "@IdDatosFox", data_Documentos[0].IdDatosFox); var comunicacionBaja = new ComunicacionBaja() { IdDocumento = $"RA-{dateTime.Year}{mes}{dia}-{numeracion}", FechaEmision = dateTime.ToString(), // Cuando se da de baja FechaReferencia = data_Documentos[0].FechaEmision, // Cuando se crea el documento Emisor = data_Emisor, Bajas = new List <DocumentoBaja>() }; foreach (var data_Documento in data_Documentos) { string[] serieCorrelativo = data_Documento.SerieCorrelativo.Split('-'); comunicacionBaja.Bajas.Add(new DocumentoBaja() { Id = numeradorLinea, TipoDocumento = data_Documento.TipoDocumento, Serie = serieCorrelativo[0].ToString(), Correlativo = serieCorrelativo[1].ToString(), MotivoBaja = data_Documento.MotivoBaja }); numeradorLinea++; } return(comunicacionBaja); }
public void ArmarBaja(String motivoBaja) { DocumentoVentaGP docGP = new DocumentoVentaGP(); docGP.GetDatosDocumentoVenta(this.Sopnumbe, this.Soptype); _documentoBaja = new ComunicacionBaja { IdDocumento = string.Format("RA-{0:yyyyMMdd}-" + Utiles.Derecha(docGP.DocVenta.correlativo, 5), DateTime.Today), FechaEmision = DateTime.Today.ToString(FormatoFecha), FechaReferencia = DateTime.Today.ToString(FormatoFecha), Emisor = new Contribuyente() { NroDocumento = docGP.DocVenta.emisorNroDoc, TipoDocumento = docGP.DocVenta.emisorTipoDoc, Direccion = docGP.DocVenta.emisorDireccion, Urbanizacion = docGP.DocVenta.emisorUrbanizacion, Departamento = docGP.DocVenta.emisorDepartamento, Provincia = docGP.DocVenta.emisorProvincia, Distrito = docGP.DocVenta.emisorDistrito, NombreComercial = docGP.DocVenta.emisorNombre, NombreLegal = docGP.DocVenta.emisorNombre, Ubigeo = docGP.DocVenta.emisorUbigeo }, Bajas = new List <DocumentoBaja>() }; _documentoBaja.Bajas.Add(new DocumentoBaja { Id = 1, Correlativo = docGP.DocVenta.numero, TipoDocumento = docGP.DocVenta.tipoDocumento, Serie = docGP.DocVenta.serie, MotivoBaja = motivoBaja }); }
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(); } }
public string Post(List <Data_Documentos> data_Documentos) { string mensajeRespuesta = string.Empty; try { GenerarComunicacionBaja generarComunicacionBaja = new GenerarComunicacionBaja(); ComunicacionBaja documento = generarComunicacionBaja.data(data_Documentos); DocumentoResponse response = generarComunicacionBaja.Post(documento); if (!response.Exito) { Data_Log data_Log = new Data_Log() { DetalleError = response.MensajeError, Comentario = $"El XML con serie correlativo: {documento.IdDocumento} no se pudo generar", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } else { string rutaArchivo = Path.Combine(data_Documentos[0].Ruta, $"{documento.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 = $"{documento.Emisor.NroDocumento}-{documento.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 = $"La comunicación de baja se ha realizado con éxito, detalle: {enviarDocumentoResponse.MensajeRespuesta}"; } else { mensajeRespuesta = $"La comunicación de baja se ha realizado con éxito, pero hemos tenido" + $"inconvenietes al obtener el CDR del documento: {documento.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 de la comunicación de baja: {documento.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 = "Comunicación de baja", ComentarioDocumento = mensajeRespuesta, Identificador = documento.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 de la comunicación de baja", 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 de la comunicación de baja, 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 = "De baja", ComentarioDocumento = $"El documento figura dentro de la comunicación de baja con código de identificación: {data_DocumentoFigurativo.Identificador}", ComunicacionBaja = true, }; 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 se ha dado de baja", 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 la comunicación de baja", 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(); } return(mensajeRespuesta); }
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(); } }
public async Task <ComunicacionBaja> Put(string organization, ComunicacionBaja model) { throw new NotImplementedException(); }