def action_send_eletronic_invoice(self): super(InvoiceEletronic, self).action_send_eletronic_invoice() if self.model == '001' and self.state not in ('done', 'cancel'): self.state = 'error' _logger.info('Sending NFS-e Paulistana (%s) %s' % ( self.numero, self.partner_id.name)) nfse_values = self._prepare_eletronic_invoice_values() cert = self.company_id.with_context( {'bin_size': False}).nfe_a1_file cert_pfx = base64.decodestring(cert) certificado = Certificado( cert_pfx, self.company_id.nfe_a1_password) if self.ambiente == 'producao': resposta = envio_lote_rps(certificado, nfse=nfse_values) else: resposta = teste_envio_lote_rps( certificado, nfse=nfse_values) retorno = resposta['object'] if retorno.Cabecalho.Sucesso: self.write({ 'state': 'done', 'codigo_retorno': '100', 'mensagem_retorno': 'Nota Paulistana emitida com sucesso', }) # Apenas producão tem essa tag if self.ambiente == 'producao': self.verify_code = \ retorno.ChaveNFeRPS.ChaveNFe.CodigoVerificacao self.numero_nfse = retorno.ChaveNFeRPS.ChaveNFe \ .NumeroNFe for inv_line in self.invoice_id.invoice_line_ids: if inv_line.product_id.fiscal_type == 'service': inv_line.write( {'state': 'transmitido', 'numero_nfse': self.numero_nfse}) else: self.write({ 'codigo_retorno': retorno.Erro.Codigo, 'mensagem_retorno': retorno.Erro.Descricao, }) self.notify_user() self.env['invoice.eletronic.event'].create({ 'code': self.codigo_retorno, 'name': self.mensagem_retorno, 'invoice_eletronic_id': self.id, }) self._create_attachment( 'nfse-envio', self, resposta['sent_xml']) self._create_attachment( 'nfse-ret', self, resposta['received_xml']) _logger.info('NFS-e Paulistana (%s) finished with status %s' % ( self.numero, self.codigo_retorno))
def test_envio_nfse(self): pfx_source = open(os.path.join(self.caminho, 'teste.pfx'), 'r').read() pfx = Certificado(pfx_source, '123456') rps = [ { 'assinatura': '123', 'serie': '1', 'numero': '1', 'data_emissao': '2016-08-29', 'codigo_atividade': '07498', 'total_servicos': '2.00', 'total_deducoes': '3.00', 'prestador': { 'inscricao_municipal': '123456' }, 'tomador': { 'tipo_cpfcnpj': '1', 'cpf_cnpj': '12345678923256', 'inscricao_municipal': '123456', 'razao_social': 'Trustcode', 'tipo_logradouro': '1', 'logradouro': 'Vinicius de Moraes, 42', 'numero': '42', 'bairro': 'Corrego', 'cidade': 'Floripa', 'uf': 'SC', 'cep': '88037240', }, 'codigo_atividade': '07498', 'aliquota_atividade': '5.00', 'descricao': 'Venda de servico' } ] nfse = { 'cpf_cnpj': '12345678901234', 'data_inicio': '2016-08-29', 'data_fim': '2016-08-29', 'lista_rps': rps } path = os.path.join(os.path.dirname(__file__), 'XMLs') xml_return = open(os.path.join( path, 'paulistana_resultado.xml'), 'r').read() with mock.patch('pytrustnfe.nfse.paulistana.get_authenticated_client') as client: retorno = mock.MagicMock() client.return_value = retorno retorno.service.EnvioLoteRPS.return_value = xml_return retorno = envio_lote_rps(pfx, nfse=nfse) self.assertEqual(retorno['received_xml'], xml_return) self.assertEqual(retorno['object'].Cabecalho.Sucesso, True) self.assertEqual( retorno['object'].ChaveNFeRPS.ChaveNFe.NumeroNFe, 446) self.assertEqual( retorno['object'].ChaveNFeRPS.ChaveRPS.NumeroRPS, 6)
def test_nfse_signature(self): pfx_source = open(os.path.join(self.caminho, 'teste.pfx'), 'r').read() pfx = Certificado(pfx_source, '123456') nfse = self._get_nfse() path = os.path.join(os.path.dirname(__file__), 'XMLs') xml_sent = open(os.path.join(path, 'paulistana_signature.xml'), 'r').read() with mock.patch('pytrustnfe.nfse.paulistana.get_authenticated_client' ) as client: retorno = mock.MagicMock() client.return_value = retorno retorno.service.EnvioLoteRPS.return_value = '<xml></xml>' retorno = envio_lote_rps(pfx, nfse=nfse) self.assertEqual(retorno['sent_xml'], xml_sent)
def action_send_eletronic_invoice(self): super(InvoiceEletronic, self).action_send_eletronic_invoice() if self.model == '001': self.state = 'error' nfse_values = self._prepare_eletronic_invoice_values() cert = self.company_id.with_context({ 'bin_size': False }).nfe_a1_file cert_pfx = base64.decodestring(cert) certificado = Certificado(cert_pfx, self.company_id.nfe_a1_password) if self.ambiente == 'producao': resposta = envio_lote_rps(certificado, nfse=nfse_values) else: resposta = teste_envio_lote_rps(certificado, nfse=nfse_values) retorno = resposta['object'] if retorno.Cabecalho.Sucesso: self.state = 'done' self.codigo_retorno = '100' self.mensagem_retorno = \ 'Nota Fiscal Paulistana emitida com sucesso' if self.ambiente == 'producao': # Apenas producão tem essa tag self.verify_code = \ retorno.ChaveNFeRPS.ChaveNFe.CodigoVerificacao self.numero_nfse = retorno.ChaveNFeRPS.ChaveNFe.NumeroNFe else: self.codigo_retorno = retorno.Erro.Codigo self.mensagem_retorno = retorno.Erro.Descricao self.env['invoice.eletronic.event'].create({ 'code': self.codigo_retorno, 'name': self.mensagem_retorno, 'invoice_eletronic_id': self.id, }) self._create_attachment('nfse-envio', self, resposta['sent_xml']) self._create_attachment('nfse-ret', self, resposta['received_xml'])
def test_nfse_signature(self): pfx_source = open(os.path.join(self.caminho, "teste.pfx"), "rb").read() pfx = Certificado(pfx_source, "123456") nfse = self._get_nfse() path = os.path.join(os.path.dirname(__file__), "XMLs") xml_sent = open(os.path.join(path, "paulistana_signature.xml"), "r").read() with mock.patch("pytrustnfe.nfse.paulistana.get_authenticated_client" ) as client: retorno = mock.MagicMock() client.return_value = retorno retorno.service.EnvioLoteRPS.return_value = "<xml></xml>" retorno = envio_lote_rps(pfx, nfse=nfse) # f = open(os.path.join(path, "paulistana_signature.xml"), "w") # f.write(retorno["sent_xml"]) # f.close() self.assertEqual(retorno["sent_xml"], xml_sent)
def send_rps(self): self.ensure_one() if self.city_code == '50308': # São Paulo self.date_format = '%Y-%m-%d' nfse = self._get_nfse_object() pfx_stream = base64.b64decode(self.certificate) certificado = Certificado(pfx_stream, self.password) if self.invoice_id.company_id.nfse_environment == '2': resposta = teste_envio_lote_rps(certificado, nfse=nfse) else: resposta = envio_lote_rps(certificado, nfse=nfse) status = self._create_status(resposta, 'envio_rps') if status['success'] and \ self.invoice_id.company_id.nfse_environment == '1': status['verify_code'] = \ resposta['object'].ChaveNFeRPS.ChaveNFe.CodigoVerificacao status['nfse_number'] = \ resposta['object'].ChaveNFeRPS.ChaveNFe.NumeroNFe return status return super(BaseNfse, self).send_rps()
def test_envio_nfse(self): pfx_source = open(os.path.join(self.caminho, "teste.pfx"), "rb").read() pfx = Certificado(pfx_source, "123456") nfse = self._get_nfse() path = os.path.join(os.path.dirname(__file__), "XMLs") xml_return = open(os.path.join(path, "paulistana_resultado.xml"), "r").read() with mock.patch("pytrustnfe.nfse.paulistana.get_authenticated_client" ) as client: retorno = mock.MagicMock() client.return_value = retorno retorno.service.EnvioLoteRPS.return_value = xml_return retorno = envio_lote_rps(pfx, nfse=nfse) self.assertEqual(retorno["received_xml"], xml_return) self.assertEqual(retorno["object"].Cabecalho.Sucesso, True) self.assertEqual(retorno["object"].ChaveNFeRPS.ChaveNFe.NumeroNFe, 446) self.assertEqual(retorno["object"].ChaveNFeRPS.ChaveRPS.NumeroRPS, 6)
def send_api(certificate, password, edocs): cert_pfx = base64.decodestring(certificate) certificado = Certificado(cert_pfx, password) nfse_values = _convert_values(edocs) if edocs[0]['ambiente'] == 'producao': resposta = envio_lote_rps(certificado, nfse=nfse_values) else: resposta = teste_envio_lote_rps(certificado, nfse=nfse_values) retorno = resposta['object'] if retorno.Cabecalho.Sucesso: if edocs[0]['ambiente'] == 'producao': return { 'code': 201, 'entity': { 'protocolo_nfe': retorno.ChaveNFeRPS.ChaveNFe.CodigoVerificacao, 'numero_nfe': retorno.ChaveNFeRPS.ChaveNFe.NumeroNFe, }, 'xml': resposta['sent_xml'].encode('utf-8'), } else: return { 'code': 201, 'entity': { 'protocolo_nfe': 'homologacao', 'numero_nfe': 1000, }, 'xml': resposta['sent_xml'].encode('utf-8'), } else: return { 'code': 400, 'api_code': retorno.Erro.Codigo, 'message': retorno.Erro.Descricao, }