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);
        }
示例#3
0
        public async Task <ParametroEmpresaModel> Put(string organization, ParametroEmpresaModel model)
        {
            var empresa = await _context.Set <EmpresaModel>().SingleOrDefaultAsync(e => e.NroDocumento == organization);

            if (empresa == null)
            {
                throw new InvalidOperationException($"Empresa con el RUC {organization} no existe");
            }
            model.Empresa = empresa;
            _context.Set <ParametroEmpresaModel>().Attach(model);
            _context.SetEntityState(model);
            await _context.SaveChangesAsync();

            return(model);
        }
示例#4
0
        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);
        }
示例#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);
        }