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 = processar_nota(
        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 "codigoVerificacao" in dir(retorno):
        return {
            'code': 201,
            'entity': {
                'protocolo_nfe': retorno.codigoVerificacao,
                'numero_nfe': retorno.numeroSerie,
            },
            'xml': recebe_lote['received_xml'],
        }
    else:
        return {
            'code': 400,
            'api_code': recebe_lote['status_code'],
            'message': retorno.message,
        }
Example #2
0
    def action_send_eletronic_invoice(self):
        super(InvoiceEletronic, self).action_send_eletronic_invoice()
        if self.model != '012' or self.state in ('done', 'cancel'):
            return

        self.state = 'error'
        xml_to_send = base64.decodestring(self.xml_to_send)

        recebe_lote = processar_nota(None,
                                     xml=xml_to_send,
                                     ambiente=self.ambiente,
                                     client_id=self.company_id.client_id,
                                     secret_id=self.company_id.client_secret,
                                     username=self.company_id.inscr_mun,
                                     password=self.company_id.user_password)

        retorno = recebe_lote['object']

        if "codigoVerificacao" in dir(retorno):
            self.state = 'done'
            self.codigo_retorno = '100'
            self.mensagem_retorno = \
                'Nota Fiscal emitida com sucesso'

            self.verify_code = retorno.codigoVerificacao
            self.numero_nfse = retorno.numeroSerie
        else:
            self.codigo_retorno = recebe_lote['status_code']
            self.mensagem_retorno = retorno.message

        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,
                                recebe_lote['sent_xml'].decode('utf-8'))
        self._create_attachment('nfse-ret', self,
                                recebe_lote['received_xml'].decode('utf-8'))