private async void CrearXmlResumen() { try { vFechaXml = "RC-" + Convert.ToString(DtpFecha.Value.Year); vFechaXml += Modfunc.Derecha("0" + Convert.ToString(DtpFecha.Value.Month), 2); vFechaXml += Modfunc.Derecha("0" + Convert.ToString(DtpFecha.Value.Day), 2); vFechaXml += "-004"; ResumenDiarioNuevo ResumenDiario = new ResumenDiarioNuevo(); ResumenDiario.IdDocumento = vFechaXml; ResumenDiario.FechaEmision = Convert.ToString(DtpFecha.Text); ResumenDiario.FechaReferencia = Convert.ToString(DtpFecha.Text); ResumenDiario.Emisor = CrearEmisor(DtEmpresa); ResumenDiario.Resumenes = new List <GrupoResumenNuevo>(); for (int ii = 0; ii <= DtDocumentos.Rows.Count - 1; ii++) { decimal vDscto = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteDsctoGlobal"]) + Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteDsctoItem"]); GrupoResumenNuevo DocumentoResumenItem = new GrupoResumenNuevo(); DocumentoResumenItem.Id = 13 + 1; DocumentoResumenItem.TipoDocumento = Convert.ToString(DtDocumentos.Rows[ii]["TipoDocumento"]); DocumentoResumenItem.Serie = Convert.ToString(DtDocumentos.Rows[ii]["SerieDocumento"]); DocumentoResumenItem.CorrelativoInicio = Convert.ToInt32(DtDocumentos.Rows[ii]["NumeroDocumento"]); DocumentoResumenItem.CorrelativoFin = Convert.ToInt32(DtDocumentos.Rows[ii]["NumeroDocumentoFinal"]); DocumentoResumenItem.Gravadas = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteGravado"]); DocumentoResumenItem.Inafectas = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteinafecto"]); DocumentoResumenItem.Exoneradas = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteexonerado"]); DocumentoResumenItem.Gratuitas = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteGratuitas"]); DocumentoResumenItem.TotalIsc = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteisc"]); DocumentoResumenItem.TotalIgv = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteIgv"]); DocumentoResumenItem.TotalDescuentos = vDscto; DocumentoResumenItem.TotalVenta = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteventa"]); ResumenDiario.Resumenes.Add(DocumentoResumenItem); } string _metodoApi = "api/GenerarResumenDiario/v1"; var response = await _client.PostAsJsonAsync(_metodoApi, ResumenDiario); var respuesta = await response.Content.ReadAsAsync <DocumentoResponse>(); if (!respuesta.Exito) { throw new ApplicationException(respuesta.MensajeError); } String vRutaXml = Convert.ToString(DtEmpresa.Rows[0]["CarpetaEnviosXml"]); RutaArchivo = Convert.ToString(DtEmpresa.Rows[0]["EmpresaRuc"]) + "-" + vFechaXml; RutaArchivo = Path.Combine(vRutaXml, $"{RutaArchivo}.xml"); File.WriteAllBytes(RutaArchivo, Convert.FromBase64String(respuesta.TramaXmlSinFirma)); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public async Task <EnviarResumenResponse> Generar(string organization, ResumenDiarioNuevo model) { EmpresaModel empresa = await _repositoryempresa.Get(organization); model.IdDocumento = string.Format("RC-{0:yyyyMMdd}-001", DateTime.Today); model.FechaEmision = DateTime.Today.ToString(FormatoFecha); model.FechaReferencia = DateTime.Today.AddDays(-1).ToString(FormatoFecha); model.Emisor = HelperTo.ToEmisor(empresa); // model.Resumenes = new List<GrupoResumenNuevo>() 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.ToSendSummaryDocument(model, parametro, responseFirma); 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] ResumenDiarioNuevo model) { try { return(Ok(await _service.Put(organization, model))); } catch (Exception ex) { throw new SuperFactException(ex.Message, ex.InnerException); } }
public String FormatearResumenElectronico(String tipoDocumento, ResumenDiarioNuevo docResumen) { Debug.WriteLine("Método Formatear Resumen"); //LINEA 1 _DocElectronicoLinea01 = "01|RESUMEN||||||||||NO|"; _DocElectronicoLinea01 = _DocElectronicoLinea01 + Environment.NewLine; // _DocElectronicoLinea02 = _DocElectronicoLinea02 + docResumen. + "|"; DateTime hoy = DateTime.Today; foreach (OpenInvoicePeru.Comun.Dto.Modelos.GrupoResumenNuevo detalle in docResumen.Resumenes) { String[] serieCorrelativo = detalle.IdDocumento.Split(new char[] { '-' }); //Datos Genericos _DocElectronicoLinea02 = _DocElectronicoLinea02 + "02|"; //Identificador de LInea _DocElectronicoLinea02 = _DocElectronicoLinea02 + hoy.ToString("yyyy-MM-dd") + "|"; _DocElectronicoLinea02 = _DocElectronicoLinea02 + docResumen.FechaEmision.Substring(0, 10) + "|"; _DocElectronicoLinea02 = _DocElectronicoLinea02 + detalle.TipoDocumento + "|"; _DocElectronicoLinea02 = _DocElectronicoLinea02 + serieCorrelativo[0] + "|"; //detalle.IdDocumento.Substring(0,4) _DocElectronicoLinea02 += serieCorrelativo[1] + "|"; _DocElectronicoLinea02 += serieCorrelativo[1] + "|"; //Importes _DocElectronicoLinea02 = _DocElectronicoLinea02 + detalle.Gravadas.ToString("0.00").Replace(",", ".") + "|"; _DocElectronicoLinea02 = _DocElectronicoLinea02 + detalle.Exoneradas.ToString("0.00").Replace(",", ".") + "|"; _DocElectronicoLinea02 = _DocElectronicoLinea02 + detalle.Inafectas.ToString("0.00").Replace(",", ".") + "|"; _DocElectronicoLinea02 = _DocElectronicoLinea02 + "|"; // OTROS_CONCEPTOS _DocElectronicoLinea02 += string.Concat(detalle.TotalIsc.ToString("0.00")?.Replace(",", "."), "|"); _DocElectronicoLinea02 = _DocElectronicoLinea02 + detalle.TotalIgv.ToString("0.00").Replace(",", ".") + "|"; _DocElectronicoLinea02 = _DocElectronicoLinea02 + detalle.TotalOtrosImpuestos.ToString("0.00").Replace(",", ".") + "|"; _DocElectronicoLinea02 = _DocElectronicoLinea02 + detalle.TotalDescuentos.ToString("0.00").Replace(",", ".") + "|"; _DocElectronicoLinea02 = _DocElectronicoLinea02 + detalle.TotalVenta.ToString("0.00").Replace(",", ".") + "|"; //Oros Datos _DocElectronicoLinea02 = _DocElectronicoLinea02 + detalle.Moneda + "|"; _DocElectronicoLinea02 += string.Concat(detalle.DocumentoRelacionado, "|"); _DocElectronicoLinea02 = _DocElectronicoLinea02 + "|"; _DocElectronicoLinea02 = _DocElectronicoLinea02 + detalle.Gratuitas.ToString("0.00").Replace(",", ".") + "|"; _DocElectronicoLinea02 += string.Concat(docResumen.Emisor.Direccion, " ", docResumen.Emisor.Urbanizacion, " ", docResumen.Emisor.Departamento, " ", docResumen.Emisor.Distrito, "|"); _DocElectronicoLinea02 = _DocElectronicoLinea02 + "|"; // TIPO_CAMBIO _DocElectronicoLinea02 = _DocElectronicoLinea02 + "|"; // detalle.MetodoPago + // METODO_PAGO no obligatorio _DocElectronicoLinea02 = _DocElectronicoLinea02 + "|"; // Observaciones _DocElectronicoLinea02 = _DocElectronicoLinea02 + detalle.DescuentosGlobales.ToString("0.00").Replace(",", ".") + "|"; _DocElectronicoLinea02 = _DocElectronicoLinea02 + "|"; // CODIGO_NOTA\n _DocElectronicoLinea02 = _DocElectronicoLinea02 + Environment.NewLine; } _DocElectronico = _DocElectronicoLinea01 + _DocElectronicoLinea02; return(_DocElectronico); }
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); }
public async Task <IActionResult> Post(string organization, [FromBody] ResumenDiarioNuevo 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 async Task <DocumentoResponse> ResumenNuevo([FromBody] ResumenDiarioNuevo resumen) { var response = new DocumentoResponse(); try { // Solucion temporal --> Issue #58 _documentoXml = UnityConfig.GetConfiguredContainer().Resolve <IDocumentoXml>(); var summary = _documentoXml.Generar(resumen); response.TramaXmlSinFirma = await _serializador.GenerarXml(summary); response.Exito = true; } catch (Exception ex) { response.Exito = false; response.MensajeError = ex.Message; response.Pila = ex.StackTrace; } return(response); }
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 async void CrearXmlResumen2() { try { vFechaXml = "RC-" + 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 += "-00" + Convert.ToString(DtDocumentos.Rows[0]["item"]); ResumenDiarioNuevo ResumenDiario = new ResumenDiarioNuevo { IdDocumento = vFechaXml, FechaEmision = Convert.ToString(DtpFechaEnvioDoc.Text), FechaReferencia = Convert.ToString(DtpFechaDoc.Text), Emisor = CrearEmisor(DtEmpresa), Resumenes = new List <GrupoResumenNuevo>() }; for (int ii = 0; ii <= DtDocumentos.Rows.Count - 1; ii++) { decimal vDscto = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteDsctoGlobal"]); string vNroDocumento = Convert.ToString(DtDocumentos.Rows[ii]["clienteID"]); string vTipoIdentidad = Convert.ToString(DtDocumentos.Rows[ii]["IdentidadID"]); string vNombreLegal = Convert.ToString(DtDocumentos.Rows[ii]["ClienterazonSocial"]); GrupoResumenNuevo DocumentoResumenItem = new GrupoResumenNuevo(); string vIdDocumento = DocumentoResumenItem.Serie = Convert.ToString(DtDocumentos.Rows[ii]["SerieDocumento"]) + "-"; vIdDocumento += DtDocumentos.Rows[ii]["NumeroDocumento"]; DocumentoResumenItem.Id = ii + 1; DocumentoResumenItem.TipoDocumento = Convert.ToString(DtDocumentos.Rows[ii]["DocumentoID"]); DocumentoResumenItem.IdDocumento = vIdDocumento; DocumentoResumenItem.NroDocumentoReceptor = vNroDocumento; DocumentoResumenItem.TipoDocumentoReceptor = vTipoIdentidad; DocumentoResumenItem.CodigoEstadoItem = 1; string vNroModifica = Convert.ToString(DtDocumentos.Rows[ii]["SeriedocumentoModifica"]) + "-" + Convert.ToString(DtDocumentos.Rows[ii]["NumeroDocumentoModifica"]); if (DocumentoResumenItem.TipoDocumento == "07" || DocumentoResumenItem.TipoDocumento == "08") { DocumentoResumenItem.TipoDocumentoRelacionado = Convert.ToString(DtDocumentos.Rows[ii]["TipoDocumentoModifica"]); DocumentoResumenItem.DocumentoRelacionado = vNroModifica; } DocumentoResumenItem.Moneda = "PEN"; DocumentoResumenItem.Gravadas = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteGravado"]); DocumentoResumenItem.Inafectas = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteinafecto"]); DocumentoResumenItem.Exoneradas = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteexonerado"]); DocumentoResumenItem.Gratuitas = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteGratuitas"]); DocumentoResumenItem.TotalIsc = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteisc"]); DocumentoResumenItem.TotalIgv = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteIgv"]); DocumentoResumenItem.TotalDescuentos = vDscto; DocumentoResumenItem.TotalVenta = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteventa"]); DocumentoResumenItem.TotalOtrosImpuestos = 0; DocumentoResumenItem.CodigoEstadoItem = 1; DocumentoResumenItem.Exportacion = 0; ResumenDiario.Resumenes.Add(DocumentoResumenItem); } string _metodoApi = "api/GenerarResumenDiario/v2"; var response = await _client.PostAsJsonAsync(_metodoApi, ResumenDiario); var respuesta = await response.Content.ReadAsAsync <DocumentoResponse>(); if (!respuesta.Exito) { throw new ApplicationException(respuesta.MensajeError); } vRutaArchivoXML = vFechaXml; vRutaArchivoXML = Path.Combine(vRutaXml, $"{vRutaArchivoXML}.xml"); File.WriteAllBytes(vRutaArchivoXML, Convert.FromBase64String(respuesta.TramaXmlSinFirma)); ModFunc.ActualizaItemDia(Ctr_AyuEmpresas.Codigo, DtpFechaDoc.Text, VGCnxSqlE); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public void ArmarResumenElectronico() { try { DocumentoVentaGP docGP = new DocumentoVentaGP(); docGP.GetDatosResumenBoletas(this.Sopnumbe, this.Soptype); _resumenElectronico = new ResumenDiarioNuevo() { IdDocumento = docGP.ResumenCab.numResumenDiario, FechaEmision = docGP.ResumenCab.docdate.ToString(FormatoFecha), //DateTime.Today.ToString(FormatoFecha), FechaReferencia = docGP.ResumenCab.docdate.ToString(FormatoFecha), Emisor = new Contribuyente() { NroDocumento = docGP.ResumenCab.emisorNroDoc, TipoDocumento = docGP.ResumenCab.emisorTipoDoc, Direccion = docGP.ResumenCab.emisorDireccion, Urbanizacion = docGP.ResumenCab.emisorUrbanizacion, Departamento = docGP.ResumenCab.emisorDepartamento, Provincia = docGP.ResumenCab.emisorProvincia, Distrito = docGP.ResumenCab.emisorDistrito, NombreComercial = docGP.ResumenCab.emisorNombre, NombreLegal = docGP.ResumenCab.emisorNombre, Ubigeo = docGP.ResumenCab.emisorUbigeo }, Resumenes = new List <GrupoResumenNuevo>() }; int i = 1; foreach (vwCfdiGeneraResumenDiario re in docGP.LDocResumenLineas) { var grn = new GrupoResumenNuevo() { Id = i, TipoDocumento = re.tipoDocumento, IdDocumento = re.sopnumbe, NroDocumentoReceptor = re.receptorNroDoc, TipoDocumentoReceptor = re.receptorTipoDoc, CodigoEstadoItem = 1, Moneda = re.moneda, TotalVenta = Convert.ToDecimal(re.total), TotalDescuentos = Convert.ToDecimal(re.totalDescuento), Gratuitas = Convert.ToDecimal(re.totalGratuito), Gravadas = Convert.ToDecimal(re.totalIvaImponible), Exoneradas = Convert.ToDecimal(re.totalExonerado), Inafectas = Convert.ToDecimal(re.totalInafecta), TotalIgv = Convert.ToDecimal(re.totalIva), DocumentoRelacionado = (re.tipoDocumento == "07" || re.tipoDocumento == "08") ? re.sopnumbeTo : null, TipoDocumentoRelacionado = (re.tipoDocumento == "07" || re.tipoDocumento == "08") ? re.tipoDocumentoTo : null //IdDocumento = re.serie, //Serie = re.serie, //CorrelativoInicio = Convert.ToInt32(re.iniRango), //CorrelativoFin = Convert.ToInt32(re.finRango), }; _resumenElectronico.Resumenes.Add(grn); i++; } } catch (Exception) { throw; } }
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, Moneda = "PEN", TotalVenta = 190.9m, TotalIgv = 29.12m, Gravadas = 161.78m, }); documentoResumenDiario.Resumenes.Add(new GrupoResumenNuevo { Id = 2, TipoDocumento = "03", IdDocumento = "BB30-33384", NroDocumentoReceptor = "08506678", TipoDocumentoReceptor = "1", CodigoEstadoItem = 1, Moneda = "USD", TotalVenta = 9580m, TotalIgv = 1411.36m, Gravadas = 8168.64m, }); Console.WriteLine("Generando XML...."); var client = new RestClient(BaseUrl); var requestInvoice = new RestRequest("GenerarResumenDiario/v2", Method.POST) { RequestFormat = DataFormat.Json }; requestInvoice.AddBody(documentoResumenDiario); var documentoResponse = client.Execute <DocumentoResponse>(requestInvoice); if (!documentoResponse.Data.Exito) { throw new ApplicationException(documentoResponse.Data.MensajeError); } File.WriteAllBytes("resumendiario.xml", Convert.FromBase64String(documentoResponse.Data.TramaXmlSinFirma)); 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 = documentoResumenDiario.Emisor.NroDocumento, UsuarioSol = "MODDATOS", ClaveSol = "MODDATOS", EndPointUrl = UrlSunat, IdDocumento = documentoResumenDiario.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(); } }
private static void CrearResumenDiario() { try { Console.WriteLine("Ejemplo de Resumen Diario"); //El nombre del archivo debe ser así: {RUC}-RC-{20180801}-{001}.XML /* * Consideraciones de los resúmenes diarios. * 1. Los Resumenes solo pueden contener hasta 500 boletas y sus respectivas notas. * 2. Si en el Resumen se consigna NC o ND entonces éstas deben ir en otro resumen con el correlativo siguiente. * 3. Los RC (Resumen de Comprobantes) es como hacer un INSERT a la BD de SUNAT. * 4. Los RC son atomicos, todo o nada. * 5. Si el codigo de error de SUNAT empieza con 1 entonces el RC no es informado, en cambio si el codigo empieza con 2 * entonces, hay que corregir el resumen. */ 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 = "888888888", 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, }); documentoResumenDiario.Resumenes.Add(new GrupoResumenNuevo { Id = 3, TipoDocumento = "03", IdDocumento = "BB30-33385", NroDocumentoReceptor = "08506678", TipoDocumentoReceptor = "1", CodigoEstadoItem = 1, // 1 - Agregar. 2 - Modificar. 3 - Eliminar Moneda = "PEN", TotalVenta = 9580m, TotalIgv = 0, Inafectas = 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); ConsultarTicket(enviarResumenResponse.NroTicket); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { Console.ReadLine(); } }
public async Task <ResumenDiarioNuevo> Put(string organization, ResumenDiarioNuevo model) { throw new NotImplementedException(); }