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);
        }
    }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 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);
     }
 }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        public static EnviarDocumentoRequest ToSendSummaryDocument(ResumenDiarioNuevo model, ParametroEmpresaModel parametro, FirmadoResponse responseFirma)
        {
            EnviarDocumentoRequest request = new EnviarDocumentoRequest();

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

            return(request);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 8
0
        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();
            }
        }
Esempio n. 9
0
        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);
            }
        }
Esempio n. 10
0
        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; }
        }
Esempio n. 11
0
        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();
            }
        }
Esempio n. 12
0
        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();
            }
        }
Esempio n. 13
0
 public async Task <ResumenDiarioNuevo> Put(string organization, ResumenDiarioNuevo model)
 {
     throw new NotImplementedException();
 }