odoo-brazil / odoo-brazil-eletronic-documents

Odoo SPED: NF-e, NFS-E, NFC-E, CT-E, ...
Other
59 stars 66 forks source link

Erro no cancelamento de NFe #101

Closed FelipeLopes360 closed 7 years ago

FelipeLopes360 commented 8 years ago

Teste realizado em ambiente de homologação. Versão do Odoo: 8.0 Localização Brasil - > Cancelar documento fiscal ->Selecionado fatura e preenchido justificativa. O seguinte erro é apresentado:

Traceback (most recent call last): File "/opt/odoo/openerp/http.py", line 543, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "/opt/odoo/openerp/http.py", line 580, in dispatch result = self._call_function(_self.params) File "/opt/odoo/openerp/http.py", line 316, in _call_function return checked_call(self.db, args, _kwargs) File "/opt/odoo/openerp/service/model.py", line 118, in wrapper return f(dbname, _args, _kwargs) File "/opt/odoo/openerp/http.py", line 313, in checked_call return self.endpoint(_a, _kw) File "/opt/odoo/openerp/http.py", line 809, in call return self.method(_args, _kw) File "/opt/odoo/openerp/http.py", line 409, in response_wrap response = f(_args, _kw) File "/opt/odoo/addons/web/controllers/main.py", line 948, in call_button action = self._call_kw(model, method, args, {}) File "/opt/odoo/addons/web/controllers/main.py", line 936, in _call_kw return getattr(request.registry.get(model), method)(request.cr, request.uid, _args, _kwargs) File "/opt/odoo/openerp/api.py", line 268, in wrapper return old_api(self, _args, _kwargs) File "/opt/odoo/openerp/api.py", line 399, in old_api result = method(recs, _args, _kwargs) File "/opt/odoo/br/odoo-brazil-eletronic-documents/nfe/models/l10n_br_account.py", line 142, in action_draft_done record.invoice_id.id, 'invoice_cancel') TypeError: trg_validate() takes exactly 5 arguments (3 given)

alexsandrohaag commented 8 years ago

Olá @FelipeLopes360 , realizei aqui o procedimento e ocorreu o mesmo problema.

Pelo que vi são mesmo necessários os 5 argumentos, falta então passar o uid (usuário logado) e cr (cursor do banco) ali na chamada do método trg_validate.

Fiz o seguinte ajuste:

no topo do arquivo, nos imports: from openerp import workflow

E no trecho do erro: workflow.trg_validate(self.env.uid, 'account.invoice', record.invoice_id.id, 'invoice_cancel', self.env.cr)

danimaribeiro commented 8 years ago

Recomendo não aplicar este fix. Já tinha feito um teste corrigindo os parâmetros, porém o método de cancelar nota no sefaz não é chamado corretamente, o que pode acarretar problemas depois achando que a nota foi cancelada online e acabou não sendo.

alexsandrohaag commented 8 years ago

@danimaribeiro , então mesmo com a correção da chamada o processo não está funcionando corretamente? Entendi. Não cheguei a validar isso.

No caso para aplicar o fix teria também que ajustar este problema da chamada do método então. Ou talvez bloquear esta opção até que esteja funcional. Acho que deixar com este erro não seria a melhor opção. Que acha?

mstuttgart commented 7 years ago

@alexsandrohaag você conseguiu encontrar uma solução para esse erro?

alexsandrohaag commented 7 years ago

@mstuttgart com a ação que mencionei acima, em princípio "funcionou", porém, como comentou o @danimaribeiro parece que a rotina mesmo assim não está realizando o cancelamento. Isso não cheguei efetivamente a testar.

mstuttgart commented 7 years ago

@alexsandrohaag entendi! Então no caso você não esta utilizando essa funcionalidade ou conseguiu algum repositório onde isso funciona?

alexsandrohaag commented 7 years ago

@mstuttgart corrigi aqui localmente, mas não sugeri nenhum pull request por conta da informação do @danimaribeiro de que outras partes da rotina não estão funcionando.

Essa instrução corrige o erro, mas não garante que a rotina vai realizar realmente o cancelamento. Se quiser testar aí e ver se vai mesmo cancelar no Sefaz... Daí podemos avaliar o que mais precisa ser corrigido.

alexsandrohaag commented 7 years ago

@mstuttgart, se quiser alterar diretamente no seu código local para o teste, basta fazer neste arquivo: /odoo-brazil-eletronic-documents/nfe/models/l10n_br_account.py

Colocando o seguinte... no topo do arquivo, nos imports: from openerp import workflow

E no trecho do erro (linha 142): workflow.trg_validate(self.env.uid, 'account.invoice', record.invoice_id.id, 'invoice_cancel', self.env.cr)

Com isso já não vai mais dar erro. Só precisa conferir se o cancelamento vai funcionar.

mstuttgart commented 7 years ago

@alexsandrohaag entendi! Estou analisando aqui e realmente o cancelamento não está funcionando (mesmo utilizando a correção que você citou). Assim que conseguir corrigir ela eu faço PR.Obrigado!

alexsandrohaag commented 7 years ago

@mstuttgart vi no fork da Trustcode que o @FelipeLopes360 também tinha questionado sobre isso por lá. O @danimaribeiro comentou que a função de cancelamento está funcional ali pela opção da fatura. Talvez seja o caso de analisar se não dá prá invocar aquela mesma chamada ao invés de ter outra fazendo a mesma coisa. A Issue lá é esta: https://github.com/Trust-Code/odoo-brazil-eletronic-documents/issues/20