def cancel_api(certificate, password, vals): cert_pfx = base64.decodestring(certificate) certificado = Certificado(cert_pfx, password) canc = { 'numero_nfse': vals['numero'], 'cnpj_prestador': vals['cnpj_cpf'], 'inscricao_municipal': vals['inscricao_municipal'], 'cidade': vals['codigo_municipio'], } resposta = cancelar_nfse(certificado, cancelamento=canc, ambiente=vals['ambiente'], client_id=vals['client_id'], secret_id=vals['client_secret'], username=vals['inscricao_municipal'], password=vals['user_password']) retorno = resposta['object'] if "RetCancelamento" in dir(retorno): return { 'code': 200, 'message': 'Nota Fiscal Cancelada', 'xml': resposta['received_xml'].split( "<?xml version='1.0' encoding='UTF-8'?>")[1].encode('utf - 8') } else: erro_retorno = retorno.ListaMensagemRetorno.MensagemRetorno return { 'code': 400, 'api_code': erro_retorno.Codigo, 'message': erro_retorno.Mensagem, }
def action_cancel_document(self, context=None, justificativa=None): if self.model not in ('014'): return super(InvoiceEletronic, self).action_cancel_document( justificativa=justificativa) if not justificativa: return { 'name': 'Cancelamento NFe', 'type': 'ir.actions.act_window', 'res_model': 'wizard.cancel.nfse', 'view_type': 'form', 'view_mode': 'form', 'target': 'new', 'context': { 'default_edoc_id': self.id } } 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) company = self.company_id city_prestador = self.company_id.partner_id.city_id canc = { 'cnpj_prestador': re.sub('[^0-9]', '', company.cnpj_cpf), 'inscricao_municipal': re.sub('[^0-9]', '', company.inscr_mun), 'cidade': '%s%s' % (city_prestador.state_id.ibge_code, city_prestador.ibge_code), 'numero_nfse': self.numero_nfse, 'codigo_cancelamento': '1', # Erro na emissão } cancel = cancelar_nfse( certificado, cancelamento=canc, ambiente=self.ambiente) retorno = cancel['object'] if "RetCancelamento" in dir(retorno): self.state = 'cancel' self.codigo_retorno = '100' self.mensagem_retorno = u'Nota Fiscal de Serviço Cancelada' else: # E79 - Nota já está cancelada if retorno.ListaMensagemRetorno.MensagemRetorno.Codigo != 'E79': mensagem = "%s - %s" % ( retorno.ListaMensagemRetorno.MensagemRetorno.Codigo, retorno.ListaMensagemRetorno.MensagemRetorno.Mensagem ) raise UserError(mensagem) self.state = 'cancel' self.codigo_retorno = '100' self.mensagem_retorno = u'Nota Fiscal de Serviço Cancelada' self.env['invoice.eletronic.event'].create({ 'code': self.codigo_retorno, 'name': self.mensagem_retorno, 'invoice_eletronic_id': self.id, }) self._create_attachment('canc', self, cancel['sent_xml']) self._create_attachment('canc-ret', self, cancel['received_xml'])