From 069348b29030345f345a1c3cbb6166bc57d8a2ec Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Thu, 13 Jun 2024 09:52:17 +0200 Subject: [PATCH 1/2] [REF] l10n_be_cooperator_national_number: Move method to res.partner Also implemented a slight fix such that `sudo()` is not necessary to call this method. Signed-off-by: Carmen Bianca BAKKER --- .../models/res_partner.py | 23 +++++++++++++++++++ .../models/subscription_request.py | 15 +++--------- .../readme/newsfragments/136.misc.1.rst | 3 +++ .../controllers/main.py | 17 +++++++------- 4 files changed, 38 insertions(+), 20 deletions(-) create mode 100644 l10n_be_cooperator_national_number/readme/newsfragments/136.misc.1.rst diff --git a/l10n_be_cooperator_national_number/models/res_partner.py b/l10n_be_cooperator_national_number/models/res_partner.py index 47550c8d2..2977c4145 100644 --- a/l10n_be_cooperator_national_number/models/res_partner.py +++ b/l10n_be_cooperator_national_number/models/res_partner.py @@ -2,7 +2,10 @@ # # SPDX-License-Identifier: AGPL-3.0-or-later +from collections import namedtuple + from odoo import api, models +from odoo.exceptions import ValidationError class ResPartner(models.Model): @@ -32,6 +35,26 @@ def get_be_national_register_number(self): return id_number.name return None + @api.model + def check_be_national_register_number(self, national_number, error=False): + """Verify whether the national number is valid. Returns True if invalid, + which is consistent with validate_l10n_be_national_registry_number. + + If error is True, a ValidationError is raised instead. + """ + belgian_cat = self.sudo().get_be_national_register_number_id_category() + # The validation function expects an id_number record. We don't have + # that yet, so we'll mock one. + IdNumber = namedtuple("ResPartnerIdNumber", ["name"]) + id_number = IdNumber(national_number) + try: + belgian_cat.validate_id_number(id_number) + except ValidationError: + if error: + raise + return True + return False + def update_belgian_national_number(self, national_number): self.ensure_one() result = None diff --git a/l10n_be_cooperator_national_number/models/subscription_request.py b/l10n_be_cooperator_national_number/models/subscription_request.py index 52bc63129..92fb73bb6 100644 --- a/l10n_be_cooperator_national_number/models/subscription_request.py +++ b/l10n_be_cooperator_national_number/models/subscription_request.py @@ -2,7 +2,6 @@ # # SPDX-License-Identifier: AGPL-3.0-or-later -from collections import namedtuple from odoo import _, api, fields, models from odoo.exceptions import UserError @@ -33,22 +32,14 @@ def _compute_require_national_number(self): request.company_id.get_require_national_number(request.is_company) ) - @api.model - def check_be_national_register_number(self, national_number): - national_number_id_category = self.env[ - "res.partner" - ].get_be_national_register_number_id_category() - # this function checks the value of id_number.name, not id_number - # directly. - id_number = namedtuple("id_number", ("name"))(national_number) - national_number_id_category.validate_id_number(id_number) - def validate_subscription_request(self): self.ensure_one() if self.require_national_number and not self.national_number: raise UserError(_("National Number is required.")) if self.national_number: - self.check_be_national_register_number(self.national_number) + self.env["res.partner"].check_be_national_register_number( + self.national_number, error=True + ) invoice = super().validate_subscription_request() if not self.is_company: partner = invoice.partner_id diff --git a/l10n_be_cooperator_national_number/readme/newsfragments/136.misc.1.rst b/l10n_be_cooperator_national_number/readme/newsfragments/136.misc.1.rst new file mode 100644 index 000000000..ac40314d1 --- /dev/null +++ b/l10n_be_cooperator_national_number/readme/newsfragments/136.misc.1.rst @@ -0,0 +1,3 @@ +``check_be_national_register_number`` moved from ``subscription.request`` to +``res.partner``. Added ``error`` kwarg, and it is no longer necessary to call +this method with ``sudo()``. diff --git a/l10n_be_cooperator_website_national_number/controllers/main.py b/l10n_be_cooperator_website_national_number/controllers/main.py index 75b1104f4..6f1dd6711 100644 --- a/l10n_be_cooperator_website_national_number/controllers/main.py +++ b/l10n_be_cooperator_website_national_number/controllers/main.py @@ -1,4 +1,3 @@ -from odoo.exceptions import ValidationError from odoo.http import request from odoo.tools.translate import _ @@ -37,14 +36,16 @@ def _additional_validate(self, kwargs, logged, values, post_file): return result national_number = values.get("national_number") if national_number: - try: - # sudo is required to allow access to res.partner.id_category. - request.env[ - "subscription.request" - ].sudo().check_be_national_register_number(values["national_number"]) + failed = request.env["res.partner"].check_be_national_register_number( + values["national_number"] + ) + if failed: + values["error_msg"] = ( + _("%s is not a valid Belgian national registration number") + % values["national_number"] + ) + else: return True - except ValidationError as ve: - values["error_msg"] = str(ve) else: is_company = kwargs.get("is_company") == "on" if not request.env.company.get_require_national_number(is_company): From 15f2d849f5522f074f53127f7a74c1ca82edf579 Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Thu, 13 Jun 2024 09:59:09 +0200 Subject: [PATCH 2/2] [REF] l10n_be_cooperator_national_number: Improve method name Signed-off-by: Carmen Bianca BAKKER --- .../models/res_partner.py | 11 +++++------ .../models/subscription_request.py | 4 ++-- .../readme/newsfragments/136.misc.1.rst | 5 +++-- .../readme/newsfragments/136.misc.2.rst | 2 ++ .../controllers/main.py | 4 ++-- 5 files changed, 14 insertions(+), 12 deletions(-) create mode 100644 l10n_be_cooperator_national_number/readme/newsfragments/136.misc.2.rst diff --git a/l10n_be_cooperator_national_number/models/res_partner.py b/l10n_be_cooperator_national_number/models/res_partner.py index 2977c4145..7beea89a8 100644 --- a/l10n_be_cooperator_national_number/models/res_partner.py +++ b/l10n_be_cooperator_national_number/models/res_partner.py @@ -36,9 +36,8 @@ def get_be_national_register_number(self): return None @api.model - def check_be_national_register_number(self, national_number, error=False): - """Verify whether the national number is valid. Returns True if invalid, - which is consistent with validate_l10n_be_national_registry_number. + def validate_be_national_register_number(self, national_number, error=False): + """Verify whether the national number is valid. Returns True if valid. If error is True, a ValidationError is raised instead. """ @@ -52,10 +51,10 @@ def check_be_national_register_number(self, national_number, error=False): except ValidationError: if error: raise - return True - return False + return False + return True - def update_belgian_national_number(self, national_number): + def update_be_national_register_number(self, national_number): self.ensure_one() result = None if national_number: diff --git a/l10n_be_cooperator_national_number/models/subscription_request.py b/l10n_be_cooperator_national_number/models/subscription_request.py index 92fb73bb6..217ff56ff 100644 --- a/l10n_be_cooperator_national_number/models/subscription_request.py +++ b/l10n_be_cooperator_national_number/models/subscription_request.py @@ -37,13 +37,13 @@ def validate_subscription_request(self): if self.require_national_number and not self.national_number: raise UserError(_("National Number is required.")) if self.national_number: - self.env["res.partner"].check_be_national_register_number( + self.env["res.partner"].validate_be_national_register_number( self.national_number, error=True ) invoice = super().validate_subscription_request() if not self.is_company: partner = invoice.partner_id - partner.update_belgian_national_number(self.national_number) + partner.update_be_national_register_number(self.national_number) return invoice def set_person_info(self, partner): diff --git a/l10n_be_cooperator_national_number/readme/newsfragments/136.misc.1.rst b/l10n_be_cooperator_national_number/readme/newsfragments/136.misc.1.rst index ac40314d1..5cb3378d3 100644 --- a/l10n_be_cooperator_national_number/readme/newsfragments/136.misc.1.rst +++ b/l10n_be_cooperator_national_number/readme/newsfragments/136.misc.1.rst @@ -1,3 +1,4 @@ ``check_be_national_register_number`` moved from ``subscription.request`` to -``res.partner``. Added ``error`` kwarg, and it is no longer necessary to call -this method with ``sudo()``. +``res.partner`` and renamed to ``validate_be_national_register_number``. Added +``error`` kwarg, and it is no longer necessary to call this method with +``sudo()``. diff --git a/l10n_be_cooperator_national_number/readme/newsfragments/136.misc.2.rst b/l10n_be_cooperator_national_number/readme/newsfragments/136.misc.2.rst new file mode 100644 index 000000000..9c3aecb7d --- /dev/null +++ b/l10n_be_cooperator_national_number/readme/newsfragments/136.misc.2.rst @@ -0,0 +1,2 @@ +``update_belgian_national_number`` renamed to +``update_be_national_register_number``. diff --git a/l10n_be_cooperator_website_national_number/controllers/main.py b/l10n_be_cooperator_website_national_number/controllers/main.py index 6f1dd6711..6271768dd 100644 --- a/l10n_be_cooperator_website_national_number/controllers/main.py +++ b/l10n_be_cooperator_website_national_number/controllers/main.py @@ -36,10 +36,10 @@ def _additional_validate(self, kwargs, logged, values, post_file): return result national_number = values.get("national_number") if national_number: - failed = request.env["res.partner"].check_be_national_register_number( + valid = request.env["res.partner"].validate_be_national_register_number( values["national_number"] ) - if failed: + if not valid: values["error_msg"] = ( _("%s is not a valid Belgian national registration number") % values["national_number"]