OCA / l10n-brazil

Localização brasileira oficial do Odoo.
https://odoo-community.org/psc-teams/brazil-66
GNU Affero General Public License v3.0
241 stars 244 forks source link

[15.0][spec_driven_model] simplify register hook #3221

Open rvalyi opened 3 months ago

rvalyi commented 3 months ago

@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):

        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.

cc @antoniospneto @renatonlima

OCA-git-bot commented 3 months ago

Hi @renatonlima, some modules you are maintaining are being modified, check this out!