diff options
| author | Nasreddin Boulif (bon) <bon@odoo.com> | 2021-05-11 23:35:36 +0000 |
|---|---|---|
| committer | Nasreddin Boulif (bon) <bon@odoo.com> | 2021-05-16 13:02:24 +0000 |
| commit | 74116c982a5ddef65a05ef90017ac4ce63bdf58f (patch) | |
| tree | 185592daf77471ba7e9a8b457b8f22a2f92d9368 /addons | |
| parent | 598dda32f48ffeb64cbd398c6ffb1fe7577468f2 (diff) | |
[FIX] base_address_extended: split 'correctly' street name
Issue
- Install "Contacts" & 'base_address_extended' modules
- Go to contacts and create a contact with value:
- street name : Chaussee de Namur
- House : 40
- Save and edit again
- Set country to 'Netherlands' then save.
Address not splited well (wrong values for street name and house).
The issue is not present in UI but is in tests.
(Issue in UI from odoo 14.0+)
Cause
There is 2 '_split_street_with_params'
(inverse function that set street fields):
- partner_autocomplete_address_extended (removed in 14.0)
- base_address_extended
The 'spliting' logic is not the same in both function.
In UI, looks like it does not call '_split_street_with_params'
from 'base_address_extended' since no super(Partner, self)...
However in testing, it does call it from module
'base_address_extended' and therefore trigger the issue.
Solution
Adapt _split_street_with_params function
(in 'base_address_extended' module):
If previous field (from 'street_format') to parse
in 'street_raw' is 'street_name', then:
- set `tmp` to: splitted (max 1 split) street_raw
with current field seperator
- set `append_previous, sep, tmp[0]` to:
splitted tmp[0] (first part of splited street_raw) with `rpartition(' ')`
- add 'append_previous' to 'street_name' value
- join 'tmp' values and set it to street
(should equal to what left from `rpartition(' ')` split
+ seconf part of first normal split)
- continue normal parsing flow
opw-2476096
closes odoo/odoo#70783
X-original-commit: d094d2646023965cb3254a31ee8f59aabaf7f2ea
Signed-off-by: bon-odoo <nboulif@users.noreply.github.com>
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/base_address_extended/models/res_partner.py | 8 | ||||
| -rw-r--r-- | addons/base_address_extended/tests/test_street_fields.py | 8 |
2 files changed, 14 insertions, 2 deletions
diff --git a/addons/base_address_extended/models/res_partner.py b/addons/base_address_extended/models/res_partner.py index 7ddb2acc6c6..87afa90fb27 100644 --- a/addons/base_address_extended/models/res_partner.py +++ b/addons/base_address_extended/models/res_partner.py @@ -93,10 +93,18 @@ class Partner(models.Model): if separator and field_name: #maxsplit set to 1 to unpack only the first element and let the rest untouched tmp = street_raw.split(separator, 1) + if previous_greedy in vals: + # attach part before space to preceding greedy field + append_previous, sep, tmp[0] = tmp[0].rpartition(' ') + street_raw = separator.join(tmp) + vals[previous_greedy] += sep + append_previous if len(tmp) == 2: field_value, street_raw = tmp vals[field_name] = field_value if field_value or not field_name: + previous_greedy = None + if field_name == 'street_name' and separator == ' ': + previous_greedy = field_name # select next field to find (first pass OR field found) # [2:-2] is used to remove the extra chars '%(' and ')s' field_name = re_match.group()[2:-2] diff --git a/addons/base_address_extended/tests/test_street_fields.py b/addons/base_address_extended/tests/test_street_fields.py index 4f8a2a30be0..c7e54ce1ff1 100644 --- a/addons/base_address_extended/tests/test_street_fields.py +++ b/addons/base_address_extended/tests/test_street_fields.py @@ -35,6 +35,7 @@ class TestStreetFields(SavepointCase): {'country_id': us_id, 'street': '40 Chaussee de Namur'}, {'country_id': us_id, 'street': 'Chaussee de Namur'}, {'country_id': mx_id, 'street': 'Av. Miguel Hidalgo y Costilla 601'}, + {'country_id': mx_id, 'street': 'Av. Miguel Hidalgo y Costilla 601/40'}, {'country_id': ch_id, 'street': 'header Chaussee de Namur, 40 - 2b trailer'}, {'country_id': ch_id, 'street': 'header Chaussee de Namur, 40 trailer'}, {'country_id': ch_id, 'street': 'header Chaussee de Namur trailer'}, @@ -43,7 +44,8 @@ class TestStreetFields(SavepointCase): {'street_name': 'Chaussee de Namur', 'street_number': '40', 'street_number2': '2b'}, {'street_name': 'Chaussee de Namur', 'street_number': '40', 'street_number2': False}, {'street_name': 'de Namur', 'street_number': 'Chaussee', 'street_number2': False}, - {'street_name': 'Av.', 'street_number': 'Miguel Hidalgo y Costilla 601', 'street_number2': False}, + {'street_name': 'Av. Miguel Hidalgo y Costilla', 'street_number': '601', 'street_number2': False}, + {'street_name': 'Av. Miguel Hidalgo y Costilla', 'street_number': '601', 'street_number2': '40'}, {'street_name': 'Chaussee de Namur', 'street_number': '40', 'street_number2': '2b'}, {'street_name': 'Chaussee de Namur', 'street_number': '40', 'street_number2': False}, {'street_name': 'Chaussee de Namur', 'street_number': False, 'street_number2': False} @@ -108,6 +110,7 @@ class TestStreetFields(SavepointCase): {'country_id': us_id, 'street': '40 Chaussee de Namur'}, {'country_id': us_id, 'street': 'Chaussee de Namur'}, {'country_id': mx_id, 'street': 'Av. Miguel Hidalgo y Costilla 601'}, + {'country_id': mx_id, 'street': 'Av. Miguel Hidalgo y Costilla 601/40'}, {'country_id': ch_id, 'street': 'header Chaussee de Namur, 40 - 2b trailer'}, {'country_id': ch_id, 'street': 'header Chaussee de Namur, 40 trailer'}, {'country_id': ch_id, 'street': 'header Chaussee de Namur trailer'}, @@ -116,7 +119,8 @@ class TestStreetFields(SavepointCase): {'street_name': 'Chaussee de Namur', 'street_number': '40', 'street_number2': '2b'}, {'street_name': 'Chaussee de Namur', 'street_number': '40', 'street_number2': False}, {'street_name': 'de Namur', 'street_number': 'Chaussee', 'street_number2': False}, - {'street_name': 'Av.', 'street_number': 'Miguel Hidalgo y Costilla 601', 'street_number2': False}, + {'street_name': 'Av. Miguel Hidalgo y Costilla', 'street_number': '601', 'street_number2': False}, + {'street_name': 'Av. Miguel Hidalgo y Costilla', 'street_number': '601', 'street_number2': '40'}, {'street_name': 'Chaussee de Namur', 'street_number': '40', 'street_number2': '2b'}, {'street_name': 'Chaussee de Namur', 'street_number': '40', 'street_number2': False}, {'street_name': 'Chaussee de Namur', 'street_number': False, 'street_number2': False} |
