Skip to content

[16.0][REF] l10n_br_base: use vat field for CNPJ and CPF #3566

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

Draft
wants to merge 8 commits into
base: 16.0
Choose a base branch
from

Conversation

rvalyi
Copy link
Member

@rvalyi rvalyi commented Dec 29, 2024

re-abertura de #3386 depois do conserto da branch 16.0 como explicado em #3490. Importante notar que a antiga branch 16.0 não constava com o port de #2718 e eu tive que retrabalhar meu PR para compatibilizar.


O objetivo desse PR é de se aproximar do modelo de dados da Odoo que desde a versão 16.0 (e até a v18) usa o vat para armazenar o CNPJ.

Na v14 botamos o vat como related do cnpj_cpf, a ideia é agora de usar a coluna vat no banco de dados e conservar o campo cnpj_cpf como um alias para conservar uma certa compatibilidade e facilitar os cherry-picks com o codigo da v14 por enquanto.

Eu tinha inicialmente introduzido o campo l10n_br_cpf_code pro CPF de acordo com o modelo do Odoo a partir da v16:
https://github.com/odoo/odoo/blob/16.0/addons/l10n_br/models/res_partner.py
porem o campo l10n_br_cpf_code foi removido e assimilado ao campo vat a partir da v17 (e continua assim na v18 ou na master):
https://github.com/odoo/odoo/blob/17.0/addons/l10n_br/models/res_partner.py

Nisso eu achei melhor deixar o CPF no campo vat mesmo. Tem nada no Odoo CE ou Odoo EE v16 que usa de fato o campo l10n_br_cpf_code então eu achei melhor já alvejar a compatibilidade com as v17 e v18 e usar o mesmo campo deixa tb mais parecido ao que tínhamos com o campo único cnpj_cpf até agora.

Eu tb aproveitei para melhorar a mensagem de validação.

@OCA-git-bot
Copy link
Contributor

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

@rvalyi rvalyi marked this pull request as draft December 29, 2024 06:59
@rvalyi rvalyi force-pushed the 16.0-vat2 branch 2 times, most recently from 404f962 to b08fbfd Compare December 29, 2024 07:38
@rvalyi rvalyi changed the title [16.0][REF] l10n_br_base: use vat field for CNPJ and extract l10n_br_cpf_code [16.0][REF] l10n_br_base: use vat field for CNPJ and CPF Dec 29, 2024
@rvalyi rvalyi force-pushed the 16.0-vat2 branch 7 times, most recently from 0f6be2b to fb08da7 Compare December 31, 2024 11:39
@rvalyi rvalyi force-pushed the 16.0-vat2 branch 2 times, most recently from aa82a11 to 5da49c1 Compare February 26, 2025 00:08
@rvalyi rvalyi force-pushed the 16.0-vat2 branch 4 times, most recently from 111cde0 to 93060ae Compare May 9, 2025 02:55
@rvalyi
Copy link
Member Author

rvalyi commented May 9, 2025

hum, parece que os testes da MDFe indicam que eu fiz algum erro no refator no l10n_br_base:

2025-05-09 03:21:23,291 448 ERROR odoo odoo.addons.l10n_br_mdfe.tests.test_mdfe_res_partner: ERROR: TestMDFeResPartner.test_inverse_fields
Traceback (most recent call last):
  File "/__w/l10n-brazil/l10n-brazil/l10n_br_mdfe/tests/test_mdfe_res_partner.py", line 25, in test_inverse_fields
    self.partner_id.mdfe30_idEstrangeiro = "999999999999"
  File "/opt/odoo/odoo/fields.py", line 1337, in __set__
    records.write({self.name: write_value})
  File "/opt/odoo/odoo/addons/base/models/res_partner.py", line 730, in write
    result = result and super(Partner, self).write(vals)
  File "/opt/odoo/addons/mail/models/mail_activity_mixin.py", line 241, in write
    return super(MailActivityMixin, self).write(vals)
  File "/opt/odoo/addons/mail/models/mail_thread.py", line 315, in write
    result = super(MailThread, self).write(values)
  File "/opt/odoo/odoo/models.py", line 3852, in write
    fields[0].determine_inverse(real_recs)
  File "/opt/odoo/odoo/fields.py", line 1413, in determine_inverse
    determine(self.inverse, records)
  File "/opt/odoo/odoo/fields.py", line 98, in determine
    return needle(*args)
  File "/__w/l10n-brazil/l10n-brazil/l10n_br_mdfe/models/res_partner.py", line 282, in _inverse_mdfe30_idEstrangeiro
    rec.vat = rec.mdfe30_idEstrangeiro
  File "/opt/odoo/odoo/fields.py", line 1337, in __set__
    records.write({self.name: write_value})
  File "/opt/odoo/odoo/addons/base/models/res_partner.py", line 730, in write
    result = result and super(Partner, self).write(vals)
  File "/opt/odoo/addons/mail/models/mail_activity_mixin.py", line 241, in write
    return super(MailActivityMixin, self).write(vals)
  File "/opt/odoo/addons/mail/models/mail_thread.py", line 315, in write
    result = super(MailThread, self).write(values)
  File "/opt/odoo/odoo/models.py", line 3842, in write
    real_recs._validate_fields(vals, inverse_fields)
  File "/opt/odoo/odoo/models.py", line 1373, in _validate_fields
    check(self)
  File "/__w/l10n-brazil/l10n-brazil/l10n_br_base/models/res_partner.py", line 184, in _check_cnpj_cpf
    check_cnpj_cpf(
  File "/__w/l10n-brazil/l10n-brazil/l10n_br_base/tools.py", line 79, in check_cnpj_cpf
    raise ValidationError(
odoo.exceptions.ValidationError: CPF 999999999999 is invalid!

Vou ver isso melhor...

@marcelsavegnago
Copy link
Member

marcelsavegnago commented May 9, 2025

cc @WesleyOliveira98 @kaynnan

@DiegoParadeda
Copy link
Contributor

@rvalyi dei uma olhada nesse teste quebrado:

image

Parece que o teste é incompatível com seu código e precisa ser atualizado.

self.partner_id.mdfe30_idEstrangeiro = "999999999999"
self.assertEqual(self.partner_id.vat, self.partner_id.mdfe30_idEstrangeiro)

Se o objetivo aqui é testar o vat == idEstrangeiro, então entendo que precisaria de um partner_id que não fosse do Brasil.
Assim daria pra testar o campo vat recebendo o valor "999999999999" sem ativar o formata evitando o erro odoo.exceptions.ValidationError: CPF 999999999999 is invalid!

Algo assim:
self.partner_2 = partner_sem_ser_do_brasil_id
self.partner_2 .mdfe30_idEstrangeiro = "999999999999"
self.assertEqual(self.partner_2 .vat, self.partner_2 .mdfe30_idEstrangeiro)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants