def cancel_api(certificate, password, vals):
    cert_pfx = base64.decodestring(certificate)
    certificado = Certificado(cert_pfx, password)
    canc = {
        'motivo': vals['justificativa'],
        'aedf': vals['aedf'],
        'numero': vals['numero'],
        'codigo_verificacao': vals['protocolo_nfe'],
    }
    resposta = cancelar_nota(
        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']
    msg_cancelada = 'A Nota Fiscal já está com a situação cancelada.'
    if resposta['status_code'] == 200 or retorno.message == msg_cancelada:
        return {
            'code': 200,
            'message': 'Nota Fiscal Cancelada',
        }
    else:
        return {
            'code': 400,
            'api_code': resposta['status_code'],
            'message': retorno.message,
        }
Esempio n. 2
0
    def action_cancel_document(self, context=None, justificativa=None):
        if self.model not in ('012'):
            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
        canc = {
            'motivo': justificativa,
            'aedf': re.sub('[^0-9]', '', company.aedf),
            'numero': self.numero_nfse,
            'codigo_verificacao': self.verify_code,
        }
        resposta = cancelar_nota(certificado,
                                 cancelamento=canc,
                                 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 = resposta['object']
        msg_cancelada = 'A Nota Fiscal já está com a situação cancelada.'
        if resposta['status_code'] == 200 or retorno.message == msg_cancelada:
            self.state = 'cancel'
            self.codigo_retorno = '100'
            self.mensagem_retorno = 'Nota Fiscal Cancelada'
        else:
            self.codigo_retorno = resposta['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('canc', self, resposta['sent_xml'])
        self._create_attachment('canc-ret', self,
                                resposta['received_xml'].decode('utf-8'))