Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[8.0] NF-E 4.0 #607

Closed
wants to merge 35 commits into from
Closed

[8.0] NF-E 4.0 #607

wants to merge 35 commits into from

Conversation

mileo
Copy link
Member

@mileo mileo commented Aug 3, 2018

mbcosta and others added 25 commits June 5, 2018 12:30
Signed-off-by: Luis Felipe Mileo <[email protected]>
Signed-off-by: Luis Felipe Mileo <[email protected]>
Signed-off-by: Luis Felipe Mileo <[email protected]>
@mileo
Copy link
Member Author

mileo commented Aug 8, 2018

@Daniel-Furcht vou dar uma olhada e já te dou um retorno

Signed-off-by: Luis Felipe Mileo <[email protected]>
Signed-off-by: Luis Felipe Mileo <[email protected]>
@mileo
Copy link
Member Author

mileo commented Aug 8, 2018

@Daniel-Furcht corrigido

@Daniel-Furcht
Copy link
Contributor

Módulos instalaram Ok.
Surgiu mais uma mensagem, não notei ainda nada errado, mas segue abaixo:

2018-08-08 23:45:51,564 28986 ERROR Teste2 openerp.addons.base.ir.ir_cron: Call of self.pool.get('account.product.fiscal.classification').update_due_ncm(cr, uid, *()) failed in Job 13
Traceback (most recent call last):
File "/opt/odoo/openerp/addons/base/ir/ir_cron.py", line 137, in _callback
getattr(model, method_name)(cr, uid, *args)
File "/opt/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/openerp/api.py", line 372, in old_api
result = method(recs, *args, **kwargs)
File "/opt/odoo/localizacao/l10n-brazil/l10n_br_account_product/models/account_product_fiscal_classification.py", line 281, in update_due_ncm
[1]).ibpt_update_days
File "/opt/odoo/openerp/fields.py", line 841, in get
return record._cache[self]
File "/opt/odoo/openerp/models.py", line 6057, in getitem
return value.get() if isinstance(value, SpecialValue) else value
File "/opt/odoo/openerp/fields.py", line 56, in get
raise self.exception
MissingError: ('MissingError', u'Um dos documentos que voc\xea est\xe1 tentando acessar foi exclu\xeddo. Atualize sua tela.')

@Daniel-Furcht
Copy link
Contributor

Daniel-Furcht commented Aug 8, 2018

Carregando uma base com dados, usada com a NFe 3.1, gerou o segunte erro ao tentar editar os dados da empresa:

Traceback (most recent call last):
File "/opt/odoo/openerp/http.py", line 546, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/opt/odoo/openerp/http.py", line 583, in dispatch
result = self._call_function(**self.params)
File "/opt/odoo/openerp/http.py", line 319, 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 316, in checked_call
return self.endpoint(*a, **kw)
File "/opt/odoo/openerp/http.py", line 812, in call
return self.method(*args, **kw)
File "/opt/odoo/openerp/http.py", line 412, in response_wrap
response = f(*args, **kw)
File "/opt/odoo/addons/web/controllers/main.py", line 944, in call_kw
return self._call_kw(model, method, args, kwargs)
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/models.py", line 1549, in fields_view_get
xarch, xfields = View.postprocess_and_fields(cr, uid, self._name, etree.fromstring(result['arch']), view_id, context=ctx)
File "/opt/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/openerp/addons/base/ir/ir_ui_view.py", line 845, in postprocess_and_fields
self.raise_view_error(cr, user, message, view_id, context)
File "/opt/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/openerp/addons/base/ir/ir_ui_view.py", line 368, in raise_view_error
raise AttributeError(message)
AttributeError: O campo out_refund_fiscal_category_id n\xe3o existe

Contexto de erro:
Veja res.company.form
[view_id: 111, xml_id: base.view_company_form, model: res.company, parent_id: n/a]

Após rodar um update nos módulos, é gerado o seguinte erro fatal:

Contexto de erro:
Veja account.payment.term.form (in l10n_br_account_product)
[view_id: 1033, xml_id: l10n_br_account_product.account_payment_term_form_view, model: account.payment.term, parent_id: 425]
2018-08-08 23:56:51,522 29319 CRITICAL Computec openerp.service.server: Failed to initialize database Computec.
Traceback (most recent call last):
File "/opt/odoo/openerp/service/server.py", line 941, in preload_registries
registry = RegistryManager.new(dbname, update_module=update_module)
File "/opt/odoo/openerp/modules/registry.py", line 370, in new
openerp.modules.load_modules(registry._db, force_demo, status, update_module)
File "/opt/odoo/openerp/modules/loading.py", line 351, in load_modules
force, status, report, loaded_modules, update_module)
File "/opt/odoo/openerp/modules/loading.py", line 255, in load_marked_modules
loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks)
File "/opt/odoo/openerp/modules/loading.py", line 192, in load_module_graph
registry['ir.ui.view']._validate_module_views(cr, SUPERUSER_ID, module_name)
File "/opt/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/openerp/addons/base/ir/ir_ui_view.py", line 1142, in _validate_module_views
if not self._check_xml(cr, uid, [vid]):
File "/opt/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/openerp/addons/base/ir/ir_ui_view.py", line 208, in _check_xml
self.postprocess_and_fields(cr, uid, view.model, view_doc, view.id, context=context)
File "/opt/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/openerp/addons/base/ir/ir_ui_view.py", line 845, in postprocess_and_fields
self.raise_view_error(cr, user, message, view_id, context)
File "/opt/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/openerp/addons/base/ir/ir_ui_view.py", line 368, in raise_view_error
raise AttributeError(message)
AttributeError: O campo indPag n\xe3o existe

Contexto de erro:
Veja account.payment.term.form (in l10n_br_account_product)
[view_id: 1033, xml_id: l10n_br_account_product.account_payment_term_form_view, model: account.payment.term, parent_id: 425]

2018-08-09 00:04:07,356 29319 ERROR Computec openerp.addons.base.ir.ir_ui_view: O campo indPag não existe

Contexto de erro:
Veja account.payment.term.form (in l10n_br_account_product)
[view_id: 1039, xml_id: l10n_br_account_product.account_payment_term_form_view, model: account.payment.term, parent_id: 425]

@mileo
Copy link
Member Author

mileo commented Aug 9, 2018

@Daniel-Furcht vc deve estar com uma view antiga perdida:

deleta ela com:

delete from ir_ui_view where arch like '%indPag%';

@mileo
Copy link
Member Author

mileo commented Aug 9, 2018

image

Quanto ao out_refund_fiscal_category_id imagino q seja algo com sua base, pois o campo é antigo e esta correto.

@Daniel-Furcht
Copy link
Contributor

@mileo , deletando a view que sugeriste, o erro do out_refund_fiscal_category_id também foi resolvido.
Próximos dias testo a emissão de NFe e dou retorno. Obrigado pela atenção.

@Daniel-Furcht
Copy link
Contributor

Ao tentar emitir uma NFe para testes diretamente no Fiscal surge a seguinte mensagem:
File "/opt/odoo/localizacao/odoo-brazil-eletronic-documents/nfe/models/account_invoice.py", line 88, in nfe_export
erro, _(u'Erro na validaço da NFe!'))
RedirectWarning: (u"Element 'cEAN': [facet 'pattern'] The value 'SEM GTIN' is not accepted by the pattern '[0-9]{0}|[0-9]{8}|[0-9]{12,14}'.\nElement 'cEAN': 'SEM GTIN' is not a valid value of the local atomic type.\nElement 'pST': This element is not expected. Expected is one of ( vBCSTRet, vBCFCPSTRet ).", u'Erro na valida\xe7o da NFe!')
2018-08-10 13:29:46,139 23003 INFO Testes_01 werkzeug: 10.40.3.26 - - [10/Aug/2018 13:29:46] "POST /web/dataset/exec_workflow HTTP/1.1" 200 -

@mileo
Copy link
Member Author

mileo commented Aug 10, 2018

@Daniel-Furcht corrigido

@mileo
Copy link
Member Author

mileo commented Aug 10, 2018

Mas fique atendo que se vc for testar em homologação as regras de validação estão diferentes e então você vai precisar preencher um EAN qualquer em seu produto.

A partir do próximo PL ( em vigor 01/09/2018) em vez de vazio só vai ser permitido enviar a informação "SEM GTIN"

@Daniel-Furcht
Copy link
Contributor

Operação Normal gerou a NFe, não testei ainda a trasmissão.
Operação com ST (Substituição Tributária) gerou o seguinte log:
2018-08-10 14:10:39,034 24967 WARNING Testes_01 openerp.pooler: openerp.pooler.get_db_and_pool() is deprecated.
2018-08-10 14:10:48,926 24967 ERROR Testes_01 openerp.http: Exception during JSON request handling.
Traceback (most recent call last):
File "/opt/odoo/openerp/http.py", line 546, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/opt/odoo/openerp/http.py", line 583, in dispatch
result = self._call_function(**self.params)
File "/opt/odoo/openerp/http.py", line 319, 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 316, in checked_call
return self.endpoint(*a, **kw)
File "/opt/odoo/openerp/http.py", line 812, in call
return self.method(*args, **kw)
File "/opt/odoo/openerp/http.py", line 412, in response_wrap
response = f(*args, **kw)
File "/opt/odoo/addons/web/controllers/main.py", line 955, in exec_workflow
return request.session.exec_workflow(model, id, signal)
File "/opt/odoo/openerp/http.py", line 1120, in exec_workflow
r = self.proxy('object').exec_workflow(self.db, self.uid, self.password, model, signal, id)
File "/opt/odoo/openerp/http.py", line 888, in proxy_method
result = dispatch_rpc(self.service_name, method, args)
File "/opt/odoo/openerp/http.py", line 115, in dispatch_rpc
result = dispatch(method, params)
File "/opt/odoo/openerp/service/model.py", line 37, in dispatch
res = fn(db, uid, *params)
File "/opt/odoo/openerp/service/model.py", line 118, in wrapper
return f(dbname, *args, **kwargs)
File "/opt/odoo/openerp/service/model.py", line 188, in exec_workflow
return exec_workflow_cr(cr, uid, obj, signal, *args)
File "/opt/odoo/openerp/service/model.py", line 182, in exec_workflow_cr
return execute_cr(cr, uid, obj, 'signal_workflow', [res_id], signal)[res_id]
File "/opt/odoo/openerp/service/model.py", line 164, in execute_cr
return getattr(object, method)(cr, uid, *args, **kw)
File "/opt/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/openerp/models.py", line 3572, in signal_workflow
result[res_id] = workflow.trg_validate(uid, self._name, res_id, signal, cr)
File "/opt/odoo/openerp/workflow/init.py", line 85, in trg_validate
return WorkflowService.new(cr, uid, res_type, res_id).validate(signal)
File "/opt/odoo/openerp/workflow/service.py", line 91, in validate
res2 = wi.validate(signal)
File "/opt/odoo/openerp/workflow/instance.py", line 80, in validate
wi.process(signal=signal, force_running=force_running, stack=stack)
File "/opt/odoo/openerp/workflow/workitem.py", line 120, in process
ok = self._split_test(activity['split_mode'], signal, stack)
File "/opt/odoo/openerp/workflow/workitem.py", line 248, in _split_test
self._join_test(t[0], t[1], stack)
File "/opt/odoo/openerp/workflow/workitem.py", line 257, in _join_test
WorkflowItem.create(self.session, self.record, activity, inst_id, stack=stack)
File "/opt/odoo/openerp/workflow/workitem.py", line 95, in create
workflow_item.process(stack=stack)
File "/opt/odoo/openerp/workflow/workitem.py", line 120, in process
ok = self._split_test(activity['split_mode'], signal, stack)
File "/opt/odoo/openerp/workflow/workitem.py", line 248, in _split_test
self._join_test(t[0], t[1], stack)
File "/opt/odoo/openerp/workflow/workitem.py", line 257, in _join_test
WorkflowItem.create(self.session, self.record, activity, inst_id, stack=stack)
File "/opt/odoo/openerp/workflow/workitem.py", line 95, in create
workflow_item.process(stack=stack)
File "/opt/odoo/openerp/workflow/workitem.py", line 116, in process
if not self._execute(activity, stack):
File "/opt/odoo/openerp/workflow/workitem.py", line 162, in _execute
returned_action = self.wkf_expr_execute(activity)
File "/opt/odoo/openerp/workflow/workitem.py", line 313, in wkf_expr_execute
return self.wkf_expr_eval_expr(activity['action'])
File "/opt/odoo/openerp/workflow/workitem.py", line 291, in wkf_expr_eval_expr
result = eval(line, env, nocopy=True)
File "/opt/odoo/openerp/tools/safe_eval.py", line 314, in safe_eval
return eval(c, globals_dict, locals_dict)
File "", line 1, in
File "/opt/odoo/openerp/api.py", line 266, in wrapper
return new_api(self, *args, **kwargs)
File "/opt/odoo/localizacao/odoo-brazil-eletronic-documents/nfe/models/account_invoice.py", line 88, in nfe_export
erro, _(u'Erro na validaço da NFe!'))
RedirectWarning: (u"Element 'pST': This element is not expected. Expected is one of ( vBCSTRet, vBCFCPSTRet ).", u'Erro na valida\xe7o da NFe!')

@mileo
Copy link
Member Author

mileo commented Aug 10, 2018

@Daniel-Furcht da mais detalhes da tributação q vc esta tentando faturar, se puder tirar alguns prints da aba imposto e posta aqui plz.

@Daniel-Furcht
Copy link
Contributor

image
IPI, PIS e COFINS são 99, percentual e valor zero

@mbcosta
Copy link
Contributor

mbcosta commented Aug 10, 2018

ola @mileo seria importante você destacar que nesse PR que você está implementando a opção de lançar mais de uma Forma de Pagamento e remover os commits que não tem relação com a NFe 4.00 ( implementação de outros IE por empresa, talvez um rebase já resolve ) e argumentar sobre o porque deveríamos incluir isso na 8.0

O que é Modo de Pagamentos Multiplos ?

Na NFe 4.00 foi colocada a opção de informar mais de uma Forma de Pagamento, isso é além de informar as Condições de Pagamentos ( ex.: 30/60/90, 15/20/35 ) também pode ser informado como será pago ( ex.: 50% Boleto 25% Dinheiro e 25% Cheque; 75% Dinheiro 25 % Cheque, etc )

Até recentemente no código da localização isso não estava sendo informado, voltamos a usar o campo "Modo de Pagamento" ( objeto payment.mode ) ao incluir os módulos sobre boletos, mas somente com a opção de escolher um Modo de Pagamento por Nota ( ex.: Dinheiro, Boleto Bancário, Cheque ), eu preferi manter isso na versão 8.0 e deixar a discussão e implementação para a versão 10.0, a ideia inicial no desenvolvimento da NFe 4.00 era fazer funcionar sem grandes mudanças para focar esforços na migração para 10.0, isso também não parece ser algo prioritário ou que impeça o uso da NFe 4.00, mas a decisão final cabe aos PSCs

@Daniel-Furcht e @Marcos-Sampaio como vocês estão testando e se souberem do que se trata seria bom ler outras opiniões sobre esse assunto

Como o Luís escreveu o ambiente de homologação está adiantando em relação ao de produção, as regras que entram em 01/09/2018 já estão sendo validadas, como os clientes preferem testar antes de entrar em produção fomos obrigados a fazer funcionar nos dois ambientes, as branchs que estão sendo usadas são:

PyPSED -> odoo-brazil/PySPED#35
Importante: aqui está sendo usado o ultimo esquema XSD disponível
@Daniel-Furcht tive problemas relacionados a uma Venda de Simples Nacional SP com ST para Contribuinte RJ , o erro era com a TAG FCP ST mas outras TAGs como você citou ( vBCSTRet, vBCFCPSTRet ) também deram problema enquanto tentava resolver, pelo que vi valores Totais ( vFCPST , vFCP, ) em alguns casos não são obrigatórios e devem ir com valor '0.00' se tiver algum valor nos Totais pode dar erro, se puder testar e ver se foi corrigido eu agradeço

Odoo-brazilian-documents -> https://github.com/odoo-brazil/odoo-brazil-eletronic-documents/tree/8.0

Localização -> akretion#77
Nesse PR só é possível informar uma Forma de Pagamento( ex.: Boleto, Cartão, Dinheiro)

@Daniel-Furcht
Copy link
Contributor

@mbcosta, vou verificar isso. Obrigado.

Copy link
Contributor

@sadamo sadamo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Está tudo funcionando.
Um ponto que acho interessante ter é o campo amount vir preenchido com o total a ser pago, visto que na maioria dos casos o valor total a ser pago vai ser o total da nota

@Daniel-Furcht
Copy link
Contributor

Daniel-Furcht commented Aug 27, 2018

Após as ultimas alterações, surgiu o seguinte erro:
File "/opt/odoo/openerp/tools/misc.py", line 260, in _fileopen raise IOError('File not found: %s' % basename)
IOError: File not found: l10n_br_sale_product/views/account_invoice_payment_line.xml

A localização do arquivo não seria:
l10n_br_account_product/views/account_invoice_payment.xml ?

Ou falta alguma dependência do módulo de vendas?

@mileo
Copy link
Member Author

mileo commented Aug 27, 2018

@Daniel-Furcht acredito que seja algo no seu código.

confira o conteúdo do arquivo: l10n_br_account_product/openerp.py e veja se ele tem esta entrada na sessão data: views/account_invoice_payment.xml

@Daniel-Furcht
Copy link
Contributor

Esta entrada não existe no arquivo.
Usei o repo https://github.com/oca/l10n-brazil.git --branch 8.0 e apliquei este PR.

@mileo mileo closed this May 14, 2019
@mileo mileo deleted the 8.0-oca-nfe-4.0 branch February 28, 2021 01:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants