-
-
Notifications
You must be signed in to change notification settings - Fork 243
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
[14.0][spec_driven_model][l10n_br_nfe] multi schemas support - round 2 #3431
Conversation
Hi @renatonlima, |
27c7895
to
425788c
Compare
425788c
to
3ae944d
Compare
3ae944d
to
985b958
Compare
@renatonlima @marcelsavegnago @antoniospneto eu resolvi o ultimo problema com a importação da Nfe, era apenas que eu tinha botado o field_prefix como Se realmente for um problema eu poderia extrair 1 ou 2 sub-PRs. Mas enfim é tempo que eu teria a menos para arrumar outras coisas importantes. Então se der para revisar assim... Eu fico curioso do feedback com a MDF-e. EDIT: ainda falta matar o a questão do attributo _spec_module. Tou vendo qual seria a melhor forma de entrar no _register_hook especificando o schema e a versão... |
a383d6f
to
08064c4
Compare
08064c4
to
ea638e5
Compare
agora sim ficou realmente multi esquemas. Eu tinha esquecido algumas propriedades nos mixins como spec.mixin.nfe. Agora realmente todos atributos tem um prefix por esquema e versão. |
Certas coisas eu tbm prefiro que fique em um PR só, facilita na revisão pq ai é uma só vez tbm. |
botei o PR como rascunho de novo, pois quando instalar apenas o modulo l10n_br_nfe, tem uma regressão ao tentar adicionar uma duplicata numa NFe (campo currency_id não existe).
Esses 3 ultimos commits evitam de ter algum atributo herdado de um mixin como spec.mixin.nfe e que poderia conflitar entre 2 esquemas (até em objetos não "stacked" como res.partner). Tou caçando o problema mas tb cuidando de projetos de clientes... |
74e90d5
to
3b01a90
Compare
@marcelsavegnago o problema com a edição das duplicatas direitamente no l10n_br_fiscal.document esta solucionado com o ultimo commit. Eu tb dei um amend no commit antérior do l10n_br_nfe para chamar o super no _generate_key(). Como ficou com a MDF-e ai? |
3b01a90
to
320f411
Compare
pessoal, o objetivo do ultimo PR era de resolver o _register_hook quando entra pelo odoo/registry.py sem ter um contexto de mapping de documento fiscal (ao contrario de importar ou exportar uma NFe por examplo). Ai eu removi os atributos dos mixins como spec.mixin.nfe porque isso daria problema: por exemplo res.partner podia herdar de spec.mixin.nfe e de spec.mixin.mdfe e ai ia conflitar. Agora analiso o mro(), vejo onde a class foi definida e tanto ler o spec_schema e spec_version do modulo que eh algo que nao eh herado e nao iria conflitar. Entao por examplo pego do Eu deveria retornar uma lista com os varios esquemas encontrados. por exemplo [(nfe, 40), (mdfe, 30)] e chamar o _register_hook para cada um dos esquemas. Vou ajustar isso... |
Aqui na classe product.product do modulo l10n_br_nfe, ou ela vira spec_models.SpecModel ou precisa definir _nfe40_odoo_module
De qq forma já estou aprovando a PR :D. Testei com o modulo mdfe, ajustei o mesmo com as mudanças do spec_driven_model e testei instalação, atualização, instalação de um modulo depois o outro, os dois juntos, testei a geração do xml e afins.. a principio OK |
bora mudar para pronta para revisão :D |
Valeu pelo retorno @marcelsavegnago . Sobre o atributo no product.product, nao me choca mas vamos guardar ele pro PR da MDFe para sinalizar que foi feito para a MDFe passar e nao apenas para a NFe. Esse problema que eu relatei de chamar o _register_hook apenas pro primeiro esquema que ele encontrar nos ancestrais do modelo, na real eh pouco provavel que pega. Porque para a NFe e MDFe vai ter pelo menos algum objeto Odoo que vai ser extendido apenas para um dos esquemas e ele vai entao chamar o _register_hook pros 2 esquemas. E se usar apenas a NFe nao tem risco nenhum. Entao podemos guardar como melhoria para fazer depois e ja fazer o merge disso para fazer entrar a MDFe como alfa na sequencia. |
Concordo.. bora mesclar então :D |
/ocabot merge major |
On my way to merge this fine PR! |
Congratulations, your PR was merged at 2b96847. Thanks a lot for contributing to OCA. ❤️ |
#3424 was a first step but here I went further:
export_ds
to_buid_binding
, notice that the publicexport_ds
was possibly also small security issue...)EDIT: explanations
So the general idea, is StackedModel's have special mapping settings like to which generated "spec" mixin they map (like l10n_br_fiscal.document.line maps on nfe.40.det, where is the Python binding xsdata package they should use for XML serialization and deserialization, which many2one fields should be de-normalized into the stacked object even if they are optional (stacking_force_paths) which required many2one should on the contrary not be stacked (stacking_skip_paths))
These mapping settings attributes are schema specific so they should not mixed between NFe, CTe, MDFe etc... even when some objects like l10n_br_fiscal.document or l10n_br_fiscal_document.line should be mapped on the same objects)
So I scoped all these mapping settings attributes. And the the challenge was to ensure that mapping methods use the proper mapping attributes. These mapping methods have roughly 3 entry points:
build_from_binding
)_build_binding
)For all these entry points I ensured the schema name and versions are passed in:
Once the entry point are entered with the proper schema name and version it sets it into the context so sub mapping methods will be have access to the proper schemas and version.