コード例 #1
0
 public async Task <IActionResult> Put(string organization, int id, [FromBody] DocumentoRetencion model)
 {
     try
     {
         return(Ok(await _service.Put(organization, model)));
     }
     catch (Exception ex)
     {
         throw new SuperFactException(ex.Message, ex.InnerException);
     }
 }
コード例 #2
0
ファイル: HelperTo.cs プロジェクト: superfact/superfact-core
        public static EnviarDocumentoRequest ToSendRetentionDocument(DocumentoRetencion 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   = "20";
            request.TramaXmlFirmado = responseFirma.TramaXmlFirmado;

            return(request);
        }
コード例 #3
0
        public async Task <IActionResult> Post(string organization, [FromBody] DocumentoRetencion model)
        {
            EnviarDocumentoResponse response = new EnviarDocumentoResponse();

            try
            {
                response = await _service.Generar(organization, model);

                response.Exito = true;
                return(Ok(response));
            }
            catch (Exception ex)
            {
                throw new SuperFactException(ex.Message, ex.InnerException);
            }
        }
コード例 #4
0
        public async Task<EnviarDocumentoResponse> Generar(string organization, DocumentoRetencion 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);

            File.WriteAllBytes("retencion.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado));

            EnviarDocumentoRequest request = HelperTo.ToSendRetentionDocument(model, parametro, responseFirma);

            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_retention.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 async Task <DocumentoResponse> Post([FromBody] DocumentoRetencion documento)
        {
            var response = new DocumentoResponse();

            try
            {
                var invoice = _documentoXml.Generar(documento);
                response.TramaXmlSinFirma = await _serializador.GenerarXml(invoice);

                response.Exito = true;
            }
            catch (Exception ex)
            {
                response.MensajeError = ex.Message;
                response.Pila         = ex.StackTrace;
                response.Exito        = false;
            }

            return(response);
        }
コード例 #6
0
        private static void CrearDocumentoRetencion()
        {
            try
            {
                Console.WriteLine("Ejemplo de Retención");
                var documento = new DocumentoRetencion
                {
                    Emisor = CrearEmisor(),
                    Receptor = new Contribuyente
                    {
                        NroDocumento = "20100039207",
                        TipoDocumento = "6",
                        NombreLegal = "RANSA COMERCIAL S.A.",
                        Ubigeo = "150101",
                        Direccion = "Av. Argentina 2833",
                        Urbanizacion = "-",
                        Departamento = "CALLAO",
                        Provincia = "CALLAO",
                        Distrito = "CALLAO"
                    },
                    IdDocumento = "R001-123",
                    FechaEmision = DateTime.Today.ToString(FormatoFecha),
                    Moneda = "PEN",
                    RegimenRetencion = "01",
                    TasaRetencion = 3,
                    ImporteTotalRetenido = 300,
                    ImporteTotalPagado = 10000,
                    Observaciones = "Emision de Facturas del periodo Dic. 2016",
                    DocumentosRelacionados = new List<ItemRetencion>
                    {
                        new ItemRetencion
                        {
                            NroDocumento = "E001-457",
                            TipoDocumento = "01",
                            MonedaDocumentoRelacionado = "USD",
                            FechaEmision = DateTime.Today.AddDays(-3).ToString(FormatoFecha),
                            ImporteTotal = 10000,
                            FechaPago = DateTime.Today.ToString(FormatoFecha),
                            NumeroPago = 153,
                            ImporteSinRetencion = 9700,
                            ImporteRetenido = 300,
                            FechaRetencion = DateTime.Today.ToString(FormatoFecha),
                            ImporteTotalNeto = 10000,
                            TipoCambio = 3.41m,
                            FechaTipoCambio = DateTime.Today.ToString(FormatoFecha)
                        }
                    }
                };

                Console.WriteLine("Generando XML....");

                var documentoResponse = RestHelper<DocumentoRetencion, DocumentoResponse>.Execute("GenerarRetencion", documento);

                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);
                }

                File.WriteAllBytes("retencion.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado));

                Console.WriteLine("Enviando Retención a SUNAT....");

                var enviarDocumentoRequest = new EnviarDocumentoRequest
                {
                    Ruc = documento.Emisor.NroDocumento,
                    UsuarioSol = "MODDATOS",
                    ClaveSol = "MODDATOS",
                    EndPointUrl = UrlOtroCpe,
                    IdDocumento = documento.IdDocumento,
                    TipoDocumento = "20",
                    TramaXmlFirmado = responseFirma.TramaXmlFirmado
                };

                var enviarDocumentoResponse = RestHelper<EnviarDocumentoRequest, EnviarDocumentoResponse>.Execute("EnviarDocumento", enviarDocumentoRequest);

                if (!enviarDocumentoResponse.Exito)
                {
                    throw new InvalidOperationException(enviarDocumentoResponse.MensajeError);
                }

                Console.WriteLine("Respuesta de SUNAT:");
                Console.WriteLine(enviarDocumentoResponse.MensajeRespuesta);

                File.WriteAllBytes("retencioncdr.zip", Convert.FromBase64String(enviarDocumentoResponse.TramaZipCdr));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadLine();
            }
        }
コード例 #7
0
        private static void CrearDocumentoRetencion()
        {
            try
            {
                Console.WriteLine("Ejemplo de Retención");
                var documento = new DocumentoRetencion
                {
                    Emisor   = CrearEmisor(),
                    Receptor = new Contribuyente
                    {
                        NroDocumento  = "20100039207",
                        TipoDocumento = "6",
                        NombreLegal   = "RANSA COMERCIAL S.A.",
                        Ubigeo        = "150101",
                        Direccion     = "Av. Argentina 2833",
                        Urbanizacion  = "-",
                        Departamento  = "CALLAO",
                        Provincia     = "CALLAO",
                        Distrito      = "CALLAO"
                    },
                    IdDocumento            = "R001-123",
                    FechaEmision           = DateTime.Today.ToString(FormatoFecha),
                    Moneda                 = "PEN",
                    RegimenRetencion       = "01",
                    TasaRetencion          = 3,
                    ImporteTotalRetenido   = 300,
                    ImporteTotalPagado     = 10000,
                    Observaciones          = "Emision de Facturas del periodo Dic. 2016",
                    DocumentosRelacionados = new List <ItemRetencion>
                    {
                        new ItemRetencion
                        {
                            NroDocumento  = "E001-457",
                            TipoDocumento = "01",
                            MonedaDocumentoRelacionado = "USD",
                            FechaEmision        = DateTime.Today.AddDays(-3).ToString(FormatoFecha),
                            ImporteTotal        = 10000,
                            FechaPago           = DateTime.Today.ToString(FormatoFecha),
                            NumeroPago          = 153,
                            ImporteSinRetencion = 9700,
                            ImporteRetenido     = 300,
                            FechaRetencion      = DateTime.Today.ToString(FormatoFecha),
                            ImporteTotalNeto    = 10000,
                            TipoCambio          = 3.41m,
                            FechaTipoCambio     = DateTime.Today.ToString(FormatoFecha)
                        }
                    }
                };

                Console.WriteLine("Generando XML....");

                var client = new RestClient(BaseUrl);

                var requestRetencion = new RestRequest("GenerarRetencion", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };

                requestRetencion.AddBody(documento);

                var documentoResponse = client.Execute <DocumentoResponse>(requestRetencion);

                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("Codigo Hash: {0}", responseFirma.Data.ResumenFirma);
                File.WriteAllBytes("retencion.xml", Convert.FromBase64String(responseFirma.Data.TramaXmlFirmado));

                Console.WriteLine("Enviando Retención a SUNAT....");

                var sendBill = new EnviarDocumentoRequest
                {
                    Ruc             = documento.Emisor.NroDocumento,
                    UsuarioSol      = "MODDATOS",
                    ClaveSol        = "MODDATOS",
                    EndPointUrl     = "https://e-beta.sunat.gob.pe/ol-ti-itemision-otroscpe-gem-beta/billService",
                    IdDocumento     = documento.IdDocumento,
                    TipoDocumento   = "20",
                    TramaXmlFirmado = responseFirma.Data.TramaXmlFirmado
                };

                var requestSendBill = new RestRequest("EnviarDocumento", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };
                requestSendBill.AddBody(sendBill);

                var responseSendBill = client.Execute <EnviarDocumentoResponse>(requestSendBill);

                if (!responseSendBill.Data.Exito)
                {
                    throw new ApplicationException(responseSendBill.Data.MensajeError);
                }

                Console.WriteLine("Respuesta de SUNAT:");
                Console.WriteLine(responseSendBill.Data.MensajeRespuesta);

                File.WriteAllBytes("cdr.zip", Convert.FromBase64String(responseSendBill.Data.TramaZipCdr));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadLine();
            }
        }
コード例 #8
0
 public async Task<DocumentoRetencion> Put(string organization, DocumentoRetencion model)
 {
     throw new NotImplementedException();
 }