Skip to content

Commit

Permalink
[REF] l10n_be_cooperator_national_number: Separate display from require
Browse files Browse the repository at this point in the history
Signed-off-by: Carmen Bianca BAKKER <carmen@coopiteasy.be>
  • Loading branch information
carmenbianca committed Jun 15, 2023
1 parent 4d63763 commit 0393cae
Show file tree
Hide file tree
Showing 8 changed files with 98 additions and 25 deletions.
2 changes: 1 addition & 1 deletion l10n_be_cooperator_national_number/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
{
"name": "Belgium: Cooperator National Number",
"summary": "Ask for Belgian National Number in Cooperative Subscription Request.",
"version": "14.0.1.0.0",
"version": "14.0.1.1.0",
"depends": ["cooperator", "l10n_be_national_number"],
"author": "Coop IT Easy SC, Odoo Community Association (OCA)",
"category": "Cooperative management",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# SPDX-FileCopyrightText: 2023 Coop IT Easy SC
#
# SPDX-License-Identifier: AGPL-3.0-or-later

from openupgradelib import openupgrade


@openupgrade.migrate()
def migrate(env, version):
sql = """
UPDATE res_company
SET display_national_number = true
WHERE require_national_number = true
"""
openupgrade.logged_query(env.cr, sql)
20 changes: 19 additions & 1 deletion l10n_be_cooperator_national_number/models/company.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,28 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).


from odoo import fields, models
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError


class ResCompany(models.Model):
_inherit = "res.company"

display_national_number = fields.Boolean(string="Display National Number")
require_national_number = fields.Boolean(string="Require National Number")

@api.constrains("display_national_number", "require_national_number")
def _check_national_number(self):
for company in self:
if company.require_national_number and not company.display_national_number:
raise ValidationError(
_(
"If the 'Require National Number' toggle is enabled,"
" then so must the 'Display National Number' toggle."
)
)

@api.onchange("display_national_number")
def _onchange_display_national_number(self):
if not self.display_national_number:
self.require_national_number = False
43 changes: 25 additions & 18 deletions l10n_be_cooperator_national_number/models/subscription_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,21 @@ class SubscriptionRequest(models.Model):
display_national_number = fields.Boolean(
compute="_compute_display_national_number",
)
require_national_number = fields.Boolean(
compute="_compute_require_national_number",
)

@api.depends("company_id", "company_id.require_national_number")
@api.depends("is_company", "company_id", "company_id.display_national_number")
def _compute_display_national_number(self):
self.display_national_number = self.company_id.require_national_number
self.display_national_number = (
self.company_id.display_national_number and not self.is_company
)

@api.depends("is_company", "company_id", "company_id.require_national_number")
def _compute_require_national_number(self):
self.require_national_number = (
self.company_id.require_national_number and not self.is_company
)

def get_national_number_from_partner(self, partner):
national_number_id_category = self.env.ref(
Expand All @@ -25,30 +36,26 @@ def get_national_number_from_partner(self, partner):

def validate_subscription_request(self):
self.ensure_one()
if (
self.display_national_number
and not self.national_number
and not self.is_company
):
if self.require_national_number and not self.national_number:
raise UserError(_("National Number is required."))
super().validate_subscription_request()

def create_national_number(self, partner):
if self.display_national_number:
if not self.is_company:
values = {
"name": self.national_number,
"category_id": self.env.ref(
"l10n_be_national_number.l10n_be_national_number_category" # noqa
).id,
"partner_id": partner.id,
}
self.env["res.partner.id_number"].create(values)
if not self.is_company:
values = {
"name": self.national_number,
"category_id": self.env.ref(
"l10n_be_national_number.l10n_be_national_number_category" # noqa
).id,
"partner_id": partner.id,
}
self.env["res.partner.id_number"].create(values)
return partner

def create_coop_partner(self):
partner = super().create_coop_partner()
self.create_national_number(partner)
if self.require_national_number:
self.create_national_number(partner)
return partner

def get_representative_vals(self):
Expand Down
4 changes: 4 additions & 0 deletions l10n_be_cooperator_national_number/readme/USAGE.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
On the company, two new toggles 'Display National Number' and 'Require National
Number' are added. In order to expose the functionality of this module, you must
enable these toggles for every company that wishes to use it. 'Display' shows
the field and allows it to be filled in. 'Require' makes the field mandatory.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# Robin Keunen <robin@coopiteasy.be>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).

from odoo.exceptions import UserError
from odoo.exceptions import UserError, ValidationError
from odoo.tests.common import SavepointCase

from odoo.addons.cooperator.tests.cooperator_test_mixin import CooperatorTestMixin
Expand All @@ -20,8 +20,33 @@ def create_subscription_request(self):

def set_national_number_required(self):
company = self.env.company
company.display_national_number = True
company.require_national_number = True

def test_require_without_display(self):
"""You cannot require a national number without also displaying it."""
company = self.env.company
company.write(
{
"display_national_number": False,
"require_national_number": False,
}
)
with self.assertRaises(ValidationError):
company.require_national_number = True
self.set_national_number_required()
with self.assertRaises(ValidationError):
company.display_national_number = False

def test_company_not_required(self):
"""Subscription requests for companies do not require a national number."""
self.set_national_number_required()
vals = self.get_dummy_company_subscription_requests_vals()
subscription_request = self.env["subscription.request"].create(vals)
subscription_request.validate_subscription_request()
self.assertFalse(subscription_request.display_national_number)
self.assertFalse(subscription_request.require_national_number)

def test_national_number_applied_to_partner(self):
self.set_national_number_required()
subscription_request = self.create_subscription_request()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@
<field name="model">res.company</field>
<field name="arch" type="xml">
<field name="allow_id_card_upload" position="after">
<field name="require_national_number" />
<field name="display_national_number" />
<field
name="require_national_number"
attrs="{'invisible': [('display_national_number', '=', False)]}"
/>
</field>
</field>
</record>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@
<field name="country_id" position="after">
<field
name="national_number"
attrs="{'invisible': ['|', ('display_national_number', '=', False), ('is_company', '=', True)],
'required': [('display_national_number', '=', True),
('is_company', '=', False)]}"
attrs="{'invisible': [('display_national_number', '=', False)],
'required': [('require_national_number', '=', True)]}"
/>
<field name="display_national_number" invisible="True" />
<field name="require_national_number" invisible="True" />
</field>
</field>
</record>
Expand Down

0 comments on commit 0393cae

Please sign in to comment.