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'])
Example #2
0
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,
        }