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, }
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'))