def cancel_api(certificate, password, vals): cert_pfx = base64.decodestring(certificate) certificado = Certificado(cert_pfx, password) canc = { 'cnpj_remetente': vals['cnpj_cpf'], 'inscricao_municipal': vals['inscricao_municipal'], 'numero_nfse': vals['numero'], 'codigo_verificacao': vals['protocolo_nfe'], 'assinatura': '%s%012d' % ( vals['inscricao_municipal'], vals['numero'], ) } if vals['ambiente'] == 'homologacao': return { 'code': 200, 'message': 'Nota Fiscal Cancelada', } resposta = cancelamento_nfe(certificado, cancelamento=canc) retorno = resposta['object'] if retorno.Cabecalho.Sucesso: return { 'code': 200, 'message': 'Nota Fiscal Cancelada', } else: return { 'code': 400, 'api_code': retorno.Erro.Codigo, 'message': retorno.Erro.Descricao, }
def cancel_nfse(self): if self.city_code == '50308': # São Paulo pfx_stream = base64.b64decode(self.certificate) certificado = Certificado(pfx_stream, self.password) company = self.invoice_id.company_id canc = { 'cnpj_remetente': re.sub('[^0-9]', '', company.cnpj_cpf), 'inscricao_municipal': re.sub('[^0-9]', '', company.inscr_mun), 'numero_nfse': self.invoice_id.internal_number, 'codigo_verificacao': self.invoice_id.verify_code, 'assinatura': '%s%s' % (re.sub('[^0-9]', '', company.inscr_mun), self.invoice_id.internal_number.zfill(12)) } resposta = cancelamento_nfe(certificado, cancelamento=canc) status = self._create_status(resposta, 'cancelamento') return status return super(BaseNfse, self).cancel_nfse()
def action_cancel_document(self, context=None, justificativa=None): if self.model not in ('001'): return super( InvoiceEletronic, self).action_cancel_document(justificativa=justificativa) _logger.info('Cancelling NFS-e Paulistana (%s)' % self.numero) 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 == 'homologacao' or \ self.company_id.tipo_ambiente_nfse == 'homologacao': self.state = 'cancel' self.codigo_retorno = '100' self.mensagem_retorno = 'Nota Fiscal Paulistana Cancelada' return company = self.company_id canc = { 'cnpj_remetente': re.sub('[^0-9]', '', company.cnpj_cpf), 'inscricao_municipal': re.sub('[^0-9]', '', company.inscr_mun), 'numero_nfse': self.numero_nfse, 'codigo_verificacao': self.verify_code, 'assinatura': '%s%s' % (re.sub('[^0-9]', '', company.inscr_mun), self.numero_nfse.zfill(12)) } resposta = cancelamento_nfe(certificado, cancelamento=canc) retorno = resposta['object'] if retorno.Cabecalho.Sucesso: self.write({ 'state': 'cancel', 'codigo_retorno': '100', 'mensagem_retorno': 'Nota Fiscal Paulistana Cancelada', }) else: self.write({ 'codigo_retorno': retorno.Erro.Codigo, '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('canc', self, resposta['sent_xml']) self._create_attachment('canc-ret', self, resposta['received_xml']) _logger.info('Cancelling NFS-e (%s) was finished with status %s' % (self.numero, self.codigo_retorno))
def test_cancelamento_nfse_ok(self): pfx_source = open(os.path.join(self.caminho, 'teste.pfx'), 'r').read() pfx = Certificado(pfx_source, '123456') cancelamento = self._get_cancelamento() path = os.path.join(os.path.dirname(__file__), 'XMLs') xml_return = open(os.path.join( path, 'paulistana_canc_ok.xml'), 'r').read() with mock.patch('pytrustnfe.nfse.paulistana.get_authenticated_client') as client: retorno = mock.MagicMock() client.return_value = retorno retorno.service.CancelamentoNFe.return_value = xml_return retorno = cancelamento_nfe(pfx, cancelamento=cancelamento) self.assertEqual(retorno['received_xml'], xml_return) self.assertEqual(retorno['object'].Cabecalho.Sucesso, True)
def test_cancelamento_nfse_ok(self): pfx_source = open(os.path.join(self.caminho, "teste.pfx"), "rb").read() pfx = Certificado(pfx_source, "123456") cancelamento = self._get_cancelamento() path = os.path.join(os.path.dirname(__file__), "XMLs") xml_return = open(os.path.join(path, "paulistana_canc_ok.xml"), "r").read() with mock.patch("pytrustnfe.nfse.paulistana.get_authenticated_client" ) as client: retorno = mock.MagicMock() client.return_value = retorno retorno.service.CancelamentoNFe.return_value = xml_return retorno = cancelamento_nfe(pfx, cancelamento=cancelamento) self.assertEqual(retorno["received_xml"], xml_return) self.assertEqual(retorno["object"].Cabecalho.Sucesso, True)