Skip to content

Commit

Permalink
Allow searching on BSN without dots
Browse files Browse the repository at this point in the history
  • Loading branch information
astirpe committed May 23, 2019
1 parent 3bea0a6 commit 5dd0c73
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 4 deletions.
4 changes: 2 additions & 2 deletions l10n_nl_bsn/__manifest__.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Copyright 2016-2018 Onestein (<https://www.onestein.eu>)
# Copyright 2016-2019 Onestein (<https://www.onestein.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

{
'name': 'Burgerservicenummer (BSN) for Partners',
'version': '12.0.1.0.0',
'version': '12.0.1.0.1',
'development_status': 'Production/Stable',
'category': 'Localization',
'author': 'Onestein, Odoo Community Association (OCA)',
Expand Down
30 changes: 29 additions & 1 deletion l10n_nl_bsn/models/res_partner.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
# Copyright 2016-2018 Onestein (<https://www.onestein.eu>)
# Copyright 2016-2019 Onestein (<https://www.onestein.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

import logging

from odoo import api, fields, models, _
from odoo.osv import expression

_logger = logging.getLogger(__name__)
try:
Expand Down Expand Up @@ -66,3 +67,30 @@ def _warn_bsn_existing(self):
'message': msg % (self.name, self.bsn_number)
}
return warning

@api.model
def search(self, args, offset=0, limit=None, order=None, count=False):
res_domain = []
for domain in args:
if (
len(domain) > 2 and domain[0] == 'bsn_number' and
isinstance(domain[2], str) and domain[2]
):
operator = domain[1]
bsn_number = domain[2]
bsn_compact = bsn.compact(bsn_number)
bsn_domain = expression.OR([
[('bsn_number', operator, bsn_number)],
[('bsn_number', operator, bsn_compact)],
])
if bsn.is_valid(bsn_number):
bsn_format = bsn.format(bsn_number)
bsn_domain = expression.OR([
bsn_domain,
[('bsn_number', operator, bsn_format)],
])
res_domain += bsn_domain
else:
res_domain.append(domain)
return super().search(
res_domain, offset=offset, limit=limit, order=order, count=count)
42 changes: 41 additions & 1 deletion l10n_nl_bsn/tests/test_l10n_nl_bsn.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright 2017-2018 Onestein (<https://www.onestein.eu>)
# Copyright 2017-2019 Onestein (<https://www.onestein.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo.tests.common import TransactionCase
Expand Down Expand Up @@ -48,3 +48,43 @@ def test_03_bsn_another_partner(self):
title = warning.get('title')
self.assertTrue(title)
self.assertEqual(title, 'Warning!')

def test_04_search_bsn_number(self):
self.partner_bsn.bsn_number = '100000009'
self.partner_bsn.onchange_bsn_number()
self.partner_bsn.write({})
self.assertEqual(self.partner_bsn.bsn_number, '1000.00.009')

res = self.env['res.partner'].search([
('bsn_number', '=', '100000009'),
])
self.assertTrue(res)
self.assertEqual(len(res), 1)
res = self.env['res.partner'].search([
('bsn_number', '=', '1000.00.009'),
])
self.assertTrue(res)
self.assertEqual(len(res), 1)
res = self.env['res.partner'].search([
('bsn_number', 'ilike', '1000.00.00'),
])
self.assertTrue(res)
self.assertEqual(len(res), 1)
res = self.env['res.partner'].search([
('bsn_number', 'ilike', '00.00.009'),
])
self.assertTrue(res)
self.assertEqual(len(res), 1)
res = self.env['res.partner'].search([
('bsn_number', 'ilike', '00.00.00'),
])
self.assertTrue(res)
self.assertEqual(len(res), 1)
res = self.env['res.partner'].search([
('bsn_number', '=', '10000000'),
])
self.assertFalse(res)
res = self.env['res.partner'].search([
('bsn_number', '=', '1000.00.00'),
])
self.assertFalse(res)

0 comments on commit 5dd0c73

Please sign in to comment.