@marcelsavegnago isso eh a parte que me faltava para tornar o spec_driven_model multi-schemas para suportar a CTe junto com a NFe. Quer dizer agora vai ficar simples na questao do hook porque simplifiquei muito. O restante eh so eu ajeitar meus commits aqui num outro PR esses dias que o restante eu ja tinha matado a charada. Fiz na v15 porque era mais simples, depois irei fazer um backport para a 14...
Neste PR eu simplifiquei mais ainda: em vez de tentar deduzir os mixins que nao foram injectados e que falta tornar concreto percorando as hierarquias stacked de novo, eu simplesmente pego a lista das relations dos campos e eu filtro os modelos que nao tem registro de ter sido injectado olhando no models.MetaModel.mixin_mappings (o _build_model preenche esse registro):
self.env.cr.execute(
"""SELECT DISTINCT relation FROM ir_model_fields
WHERE relation LIKE %s;""",
(f"{self._schema_name}.{self._schema_version.replace('.', '')[:2]}.%",),
)
# now we will filter only the spec models not injected into some existing class:
remaining_models = {
i[0]
for i in self.env.cr.fetchall()
if self.env.registry.get(i[0])
and not models.MetaModel.mixin_mappings.get(i[0])
}
Alem disso simplifiquei o _build_model mais ainda para injectar direitamente o spec.mixin no mixin parente dos mixins (spec.mixin.nfe ou spec.mixin.cte por examplo). E deu para remover mais algumas coisas da antiga logica de hook.
@marcelsavegnago isso eh a parte que me faltava para tornar o spec_driven_model multi-schemas para suportar a CTe junto com a NFe. Quer dizer agora vai ficar simples na questao do hook porque simplifiquei muito. O restante eh so eu ajeitar meus commits aqui num outro PR esses dias que o restante eu ja tinha matado a charada. Fiz na v15 porque era mais simples, depois irei fazer um backport para a 14...
No PR https://github.com/OCA/l10n-brazil/pull/3215 eu ja tinha simplificado muito o hook usando apenas o _register_hook.
Neste PR eu simplifiquei mais ainda: em vez de tentar deduzir os mixins que nao foram injectados e que falta tornar concreto percorando as hierarquias stacked de novo, eu simplesmente pego a lista das relations dos campos e eu filtro os modelos que nao tem registro de ter sido injectado olhando no models.MetaModel.mixin_mappings (o _build_model preenche esse registro):
Alem disso simplifiquei o _build_model mais ainda para injectar direitamente o spec.mixin no mixin parente dos mixins (spec.mixin.nfe ou spec.mixin.cte por examplo). E deu para remover mais algumas coisas da antiga logica de hook.
cc @antoniospneto @renatonlima