diff --git a/__init__.py b/__init__.py index 4462ad1..6bbb9c2 100644 --- a/__init__.py +++ b/__init__.py @@ -6,5 +6,5 @@ from . import party def register(): Pool.register( party.Address, - party.CountryZip, + party.PostalCode, module='party_zip', type_='model') diff --git a/party.py b/party.py index 7cdae96..3dc193e 100644 --- a/party.py +++ b/party.py @@ -4,12 +4,10 @@ from trytond.model import fields from trytond.pool import PoolMeta, Pool from trytond.pyson import Eval, If, Bool -__all__ = ['Address', 'CountryZip'] - class Address(metaclass=PoolMeta): __name__ = 'party.address' - country_zip = fields.Many2One('country.zip', 'Location', + location = fields.Many2One('country.postal_code', 'Location', ondelete='RESTRICT', domain=[ If(Bool(Eval('country')), ('country', '=', Eval('country', -1)), ()), @@ -20,66 +18,72 @@ class Address(metaclass=PoolMeta): @classmethod def __setup__(cls): super(Address, cls).__setup__() - cls.zip.readonly = True + cls.postal_code.readonly = True cls.city.readonly = True - cls.country.states['readonly'] |= Bool(Eval('country_zip')) - cls.subdivision.states['readonly'] |= Bool(Eval('country_zip')) + cls.country.states['readonly'] |= Bool(Eval('location')) + cls.subdivision.states['readonly'] |= Bool(Eval('location')) + + @classmethod + def __register__(cls, module): + # Migration from 5.8: rename country_zip to location + table_h = cls.__table_handler__(module) + table_h.column_rename('country_zip', 'location') + super().__register__(module) @staticmethod - def update_zip_values(CountryZip, values): + def update_location_values(values): + pool = Pool() + PostalCode = pool.get('country.postal_code') + values = values.copy() - if 'country_zip' in values: - if values['country_zip']: - country_zip, = CountryZip.search([ - ('id', '=', values['country_zip']), - ], limit=1) - values['zip'] = country_zip.zip - values['city'] = country_zip.city - values['country'] = country_zip.country.id - values['subdivision'] = (country_zip.subdivision.id if - country_zip.subdivision else None) + if 'location' in values: + if values['location']: + postal_code = PostalCode(values['location']) + values['postal_code'] = postal_code.postal_code + values['city'] = postal_code.city + values['country'] = postal_code.country.id + values['subdivision'] = (postal_code.subdivision.id if + postal_code.subdivision else None) else: - values['zip'] = None + values['postal_code'] = None values['city'] = None return values @classmethod def create(cls, vlist): - CountryZip = Pool().get('country.zip') new_vlist = [] for values in vlist: - new_vlist.append(cls.update_zip_values(CountryZip, values)) + new_vlist.append(cls.update_location_values(values)) return super(Address, cls).create(new_vlist) @classmethod def write(cls, *args): - CountryZip = Pool().get('country.zip') actions = iter(args) new_args = [] for addresses, values in zip(actions, actions): new_args.append(addresses) - new_args.append(cls.update_zip_values(CountryZip, values)) + new_args.append(cls.update_location_values(values)) super(Address, cls).write(*new_args) - @fields.depends('country_zip') - def on_change_country_zip(self): - if self.country_zip: - self.zip = self.country_zip.zip - self.city = self.country_zip.city - self.country = self.country_zip.country - self.subdivision = self.country_zip.subdivision + @fields.depends('location') + def on_change_location(self): + if self.location: + self.postal_code = self.location.postal_code + self.city = self.location.city + self.country = self.location.country + self.subdivision = self.location.subdivision else: - self.zip = None + self.postal_code = None self.city = None -class CountryZip(metaclass=PoolMeta): - __name__ = 'country.zip' +class PostalCode(metaclass=PoolMeta): + __name__ = 'country.postal_code' def get_rec_name(self, name): res = [] - if self.zip: - res.append(self.zip) + if self.postal_code: + res.append(self.postal_code) if self.city: res.append(self.city) res = [' '.join(res)] @@ -92,7 +96,7 @@ class CountryZip(metaclass=PoolMeta): @classmethod def search_rec_name(cls, name, clause): return ['OR', - [('zip',) + tuple(clause[1:])], + [('postal_code',) + tuple(clause[1:])], [('city',) + tuple(clause[1:])], ] @@ -100,17 +104,17 @@ class CountryZip(metaclass=PoolMeta): def write(cls, *args): Address = Pool().get('party.address') - super(CountryZip, cls).write(*args) + super().write(*args) actions = iter(args) - fields = set(['zip', 'city', 'country', 'subdivision']) + fields = set(['postal_code', 'city', 'country', 'subdivision']) to_update = [] - for zips, values in zip(actions, actions): + for locations, values in zip(actions, actions): intersec = set(values.keys()) & fields if not intersec: continue addresses = Address.search([ - ('country_zip', 'in', [x.id for x in zips]), + ('location', 'in', [x.id for x in locations]), ]) to_update.append(addresses) address_values = {} diff --git a/party.xml b/party.xml index 39f1793..045c6fa 100644 --- a/party.xml +++ b/party.xml @@ -45,21 +45,21 @@ - - Zips - country.zip + + Postal Codes + country.postal_code - + - - + + - + - - + + - + diff --git a/tests/test_party_zip.py b/tests/test_party_zip.py index 6ce3de5..edfbf9e 100644 --- a/tests/test_party_zip.py +++ b/tests/test_party_zip.py @@ -18,7 +18,7 @@ class PartyZipTestCase(ModuleTestCase): Address = pool.get('party.address') Country = pool.get('country.country') Subdivision = pool.get('country.subdivision') - Zip = pool.get('country.zip') + PostalCode = pool.get('country.postal_code') country1, country2 = Country.create([{ 'name': 'Country 1', @@ -36,13 +36,13 @@ class PartyZipTestCase(ModuleTestCase): 'type': 'area', 'country': country2.id, }]) - zip1, zip2 = Zip.create([{ - 'zip': 'zip1', + postal_code1, postal_code2 = PostalCode.create([{ + 'postal_code': 'postal_code1', 'city': 'city1', 'country': country1.id, 'subdivision': subdivision1.id, }, { - 'zip': 'zip2', + 'postal_code': 'postal_code2', 'city': 'city2', 'country': country2.id, 'subdivision': subdivision2.id, @@ -55,32 +55,32 @@ class PartyZipTestCase(ModuleTestCase): 'street': 'St sample, 15', 'city': 'City', }]) - self.assertEqual(address.zip, None) + self.assertEqual(address.postal_code, None) self.assertEqual(address.city, 'City') Address.write([address], { - 'country_zip': zip1.id, + 'location': postal_code1.id, }) - self.assertEqual(address.zip, 'zip1') + self.assertEqual(address.postal_code, 'postal_code1') self.assertEqual(address.city, 'city1') self.assertEqual(address.country.id, country1.id) self.assertEqual(address.subdivision.id, subdivision1.id) Address.write([address], { - 'country_zip': zip2.id, + 'location': postal_code2.id, }) - self.assertEqual(address.zip, 'zip2') + self.assertEqual(address.postal_code, 'postal_code2') self.assertEqual(address.city, 'city2') self.assertEqual(address.country.id, country2.id) self.assertEqual(address.subdivision.id, subdivision2.id) - Zip.write([zip2], { - 'zip': 'ZIP 3', + PostalCode.write([postal_code2], { + 'postal_code': 'Postal Code 3', 'city': 'CITY 3', 'country': country1.id, 'subdivision': subdivision1.id, }) address, = Address.browse([address.id]) - self.assertEqual(address.zip, 'ZIP 3') + self.assertEqual(address.postal_code, 'Postal Code 3') self.assertEqual(address.city, 'CITY 3') self.assertEqual(address.country.id, country1.id) self.assertEqual(address.subdivision.id, subdivision1.id) diff --git a/view/address_form.xml b/view/address_form.xml index 55fa34d..6a2a3b8 100644 --- a/view/address_form.xml +++ b/view/address_form.xml @@ -2,9 +2,9 @@ - -