def action_send_eletronic_invoice(self): super(InvoiceEletronic, self).action_send_eletronic_invoice() if self.model != '014' or self.state in ('done', 'cancel'): return self.state = 'error' xml_to_send = base64.decodestring(self.xml_to_send) 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) enviar_nfse = gerar_nfse(certificado, xml=xml_to_send, ambiente=self.ambiente) retorno = enviar_nfse['object'] if "ListaNfse" in dir(retorno): self.state = 'done' self.codigo_retorno = '100' self.mensagem_retorno = 'NFSe emitida com sucesso' self.verify_code = \ retorno.ListaNfse.CompNfse.Nfse.InfNfse.CodigoVerificacao.text self.numero_nfse = retorno.ListaNfse.CompNfse.Nfse.InfNfse.Numero else: msg = None if "ListaMensagemRetorno" in dir(retorno): msg = retorno.ListaMensagemRetorno.MensagemRetorno else: msg = retorno.ListaMensagemRetornoLote.MensagemRetorno self.codigo_retorno = msg.Codigo self.mensagem_retorno = msg.Mensagem 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, enviar_nfse['sent_xml']) self._create_attachment('nfse-ret', self, enviar_nfse['received_xml'])
def send_api(certificate, password, list_rps): cert_pfx = base64.decodestring(certificate) certificado = Certificado(cert_pfx, password) vals = list_rps[0] vals = _convert_values(vals) recebe_lote = gerar_nfse(certificado, rps=vals, ambiente=vals['ambiente'], client_id=vals['client_id'], secret_id=vals['client_secret'], username=vals['emissor']['inscricao_municipal'], password=vals['user_password']) retorno = recebe_lote['object'] if "ListaNfse" in dir(retorno): inf_nfse = retorno.ListaNfse.CompNfse.Nfse.InfNfse return { 'code': 201, 'entity': { 'protocolo_nfe': inf_nfse.CodigoVerificacao, # get last 9 digits :) 'numero_nfe': inf_nfse.Numero % 1000000000, }, 'xml': recebe_lote['received_xml'].encode('utf-8'), } else: if "ListaMensagemRetornoLote" in dir(retorno): mensagem_retorno = retorno.ListaMensagemRetornoLote.MensagemRetorno else: mensagem_retorno = retorno.ListaMensagemRetorno.MensagemRetorno return { 'code': 400, 'api_code': mensagem_retorno.Codigo, 'message': mensagem_retorno.Mensagem, }