Rename zip into postal code (issue9853)

This commit is contained in:
Albert Cervera i Areny 2021-04-01 16:10:17 +02:00
parent 08f90c35d8
commit d96822ce9d
5 changed files with 70 additions and 66 deletions

View File

@ -6,5 +6,5 @@ from . import party
def register(): def register():
Pool.register( Pool.register(
party.Address, party.Address,
party.CountryZip, party.PostalCode,
module='party_zip', type_='model') module='party_zip', type_='model')

View File

@ -4,12 +4,10 @@ from trytond.model import fields
from trytond.pool import PoolMeta, Pool from trytond.pool import PoolMeta, Pool
from trytond.pyson import Eval, If, Bool from trytond.pyson import Eval, If, Bool
__all__ = ['Address', 'CountryZip']
class Address(metaclass=PoolMeta): class Address(metaclass=PoolMeta):
__name__ = 'party.address' __name__ = 'party.address'
country_zip = fields.Many2One('country.zip', 'Location', location = fields.Many2One('country.postal_code', 'Location',
ondelete='RESTRICT', domain=[ ondelete='RESTRICT', domain=[
If(Bool(Eval('country')), ('country', '=', Eval('country', -1)), If(Bool(Eval('country')), ('country', '=', Eval('country', -1)),
()), ()),
@ -20,66 +18,72 @@ class Address(metaclass=PoolMeta):
@classmethod @classmethod
def __setup__(cls): def __setup__(cls):
super(Address, cls).__setup__() super(Address, cls).__setup__()
cls.zip.readonly = True cls.postal_code.readonly = True
cls.city.readonly = True cls.city.readonly = True
cls.country.states['readonly'] |= Bool(Eval('country_zip')) cls.country.states['readonly'] |= Bool(Eval('location'))
cls.subdivision.states['readonly'] |= Bool(Eval('country_zip')) 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 @staticmethod
def update_zip_values(CountryZip, values): def update_location_values(values):
pool = Pool()
PostalCode = pool.get('country.postal_code')
values = values.copy() values = values.copy()
if 'country_zip' in values: if 'location' in values:
if values['country_zip']: if values['location']:
country_zip, = CountryZip.search([ postal_code = PostalCode(values['location'])
('id', '=', values['country_zip']), values['postal_code'] = postal_code.postal_code
], limit=1) values['city'] = postal_code.city
values['zip'] = country_zip.zip values['country'] = postal_code.country.id
values['city'] = country_zip.city values['subdivision'] = (postal_code.subdivision.id if
values['country'] = country_zip.country.id postal_code.subdivision else None)
values['subdivision'] = (country_zip.subdivision.id if
country_zip.subdivision else None)
else: else:
values['zip'] = None values['postal_code'] = None
values['city'] = None values['city'] = None
return values return values
@classmethod @classmethod
def create(cls, vlist): def create(cls, vlist):
CountryZip = Pool().get('country.zip')
new_vlist = [] new_vlist = []
for values in 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) return super(Address, cls).create(new_vlist)
@classmethod @classmethod
def write(cls, *args): def write(cls, *args):
CountryZip = Pool().get('country.zip')
actions = iter(args) actions = iter(args)
new_args = [] new_args = []
for addresses, values in zip(actions, actions): for addresses, values in zip(actions, actions):
new_args.append(addresses) 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) super(Address, cls).write(*new_args)
@fields.depends('country_zip') @fields.depends('location')
def on_change_country_zip(self): def on_change_location(self):
if self.country_zip: if self.location:
self.zip = self.country_zip.zip self.postal_code = self.location.postal_code
self.city = self.country_zip.city self.city = self.location.city
self.country = self.country_zip.country self.country = self.location.country
self.subdivision = self.country_zip.subdivision self.subdivision = self.location.subdivision
else: else:
self.zip = None self.postal_code = None
self.city = None self.city = None
class CountryZip(metaclass=PoolMeta): class PostalCode(metaclass=PoolMeta):
__name__ = 'country.zip' __name__ = 'country.postal_code'
def get_rec_name(self, name): def get_rec_name(self, name):
res = [] res = []
if self.zip: if self.postal_code:
res.append(self.zip) res.append(self.postal_code)
if self.city: if self.city:
res.append(self.city) res.append(self.city)
res = [' '.join(res)] res = [' '.join(res)]
@ -92,7 +96,7 @@ class CountryZip(metaclass=PoolMeta):
@classmethod @classmethod
def search_rec_name(cls, name, clause): def search_rec_name(cls, name, clause):
return ['OR', return ['OR',
[('zip',) + tuple(clause[1:])], [('postal_code',) + tuple(clause[1:])],
[('city',) + tuple(clause[1:])], [('city',) + tuple(clause[1:])],
] ]
@ -100,17 +104,17 @@ class CountryZip(metaclass=PoolMeta):
def write(cls, *args): def write(cls, *args):
Address = Pool().get('party.address') Address = Pool().get('party.address')
super(CountryZip, cls).write(*args) super().write(*args)
actions = iter(args) actions = iter(args)
fields = set(['zip', 'city', 'country', 'subdivision']) fields = set(['postal_code', 'city', 'country', 'subdivision'])
to_update = [] to_update = []
for zips, values in zip(actions, actions): for locations, values in zip(actions, actions):
intersec = set(values.keys()) & fields intersec = set(values.keys()) & fields
if not intersec: if not intersec:
continue continue
addresses = Address.search([ addresses = Address.search([
('country_zip', 'in', [x.id for x in zips]), ('location', 'in', [x.id for x in locations]),
]) ])
to_update.append(addresses) to_update.append(addresses)
address_values = {} address_values = {}

View File

@ -45,21 +45,21 @@
<field name="action" ref="act_subdivision_form2"/> <field name="action" ref="act_subdivision_form2"/>
</record> </record>
<record model="ir.action.act_window" id="act_zip_form"> <record model="ir.action.act_window" id="act_postal_code_form">
<field name="name">Zips</field> <field name="name">Postal Codes</field>
<field name="res_model">country.zip</field> <field name="res_model">country.postal_code</field>
</record> </record>
<record model="ir.action.act_window.view" id="act_zip_form_view1"> <record model="ir.action.act_window.view" id="act_postal_code_form_view1">
<field name="sequence" eval="10"/> <field name="sequence" eval="10"/>
<field name="view" ref="country.zip_view_list"/> <field name="view" ref="country.postal_code_view_list"/>
<field name="act_window" ref="act_zip_form"/> <field name="act_window" ref="act_postal_code_form"/>
</record> </record>
<record model="ir.action.act_window.view" id="act_zip_form_view2"> <record model="ir.action.act_window.view" id="act_postal_code_form_view2">
<field name="sequence" eval="20"/> <field name="sequence" eval="20"/>
<field name="view" ref="country.zip_view_form"/> <field name="view" ref="country.postal_code_view_form"/>
<field name="act_window" ref="act_zip_form"/> <field name="act_window" ref="act_postal_code_form"/>
</record> </record>
<menuitem parent="country.menu_country_form" action="act_zip_form" <menuitem parent="country.menu_country_form" action="act_postal_code_form"
id="menu_zip_form"/> id="menu_postal_code_form"/>
</data> </data>
</tryton> </tryton>

View File

@ -18,7 +18,7 @@ class PartyZipTestCase(ModuleTestCase):
Address = pool.get('party.address') Address = pool.get('party.address')
Country = pool.get('country.country') Country = pool.get('country.country')
Subdivision = pool.get('country.subdivision') Subdivision = pool.get('country.subdivision')
Zip = pool.get('country.zip') PostalCode = pool.get('country.postal_code')
country1, country2 = Country.create([{ country1, country2 = Country.create([{
'name': 'Country 1', 'name': 'Country 1',
@ -36,13 +36,13 @@ class PartyZipTestCase(ModuleTestCase):
'type': 'area', 'type': 'area',
'country': country2.id, 'country': country2.id,
}]) }])
zip1, zip2 = Zip.create([{ postal_code1, postal_code2 = PostalCode.create([{
'zip': 'zip1', 'postal_code': 'postal_code1',
'city': 'city1', 'city': 'city1',
'country': country1.id, 'country': country1.id,
'subdivision': subdivision1.id, 'subdivision': subdivision1.id,
}, { }, {
'zip': 'zip2', 'postal_code': 'postal_code2',
'city': 'city2', 'city': 'city2',
'country': country2.id, 'country': country2.id,
'subdivision': subdivision2.id, 'subdivision': subdivision2.id,
@ -55,32 +55,32 @@ class PartyZipTestCase(ModuleTestCase):
'street': 'St sample, 15', 'street': 'St sample, 15',
'city': 'City', 'city': 'City',
}]) }])
self.assertEqual(address.zip, None) self.assertEqual(address.postal_code, None)
self.assertEqual(address.city, 'City') self.assertEqual(address.city, 'City')
Address.write([address], { 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.city, 'city1')
self.assertEqual(address.country.id, country1.id) self.assertEqual(address.country.id, country1.id)
self.assertEqual(address.subdivision.id, subdivision1.id) self.assertEqual(address.subdivision.id, subdivision1.id)
Address.write([address], { 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.city, 'city2')
self.assertEqual(address.country.id, country2.id) self.assertEqual(address.country.id, country2.id)
self.assertEqual(address.subdivision.id, subdivision2.id) self.assertEqual(address.subdivision.id, subdivision2.id)
Zip.write([zip2], { PostalCode.write([postal_code2], {
'zip': 'ZIP 3', 'postal_code': 'Postal Code 3',
'city': 'CITY 3', 'city': 'CITY 3',
'country': country1.id, 'country': country1.id,
'subdivision': subdivision1.id, 'subdivision': subdivision1.id,
}) })
address, = Address.browse([address.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.city, 'CITY 3')
self.assertEqual(address.country.id, country1.id) self.assertEqual(address.country.id, country1.id)
self.assertEqual(address.subdivision.id, subdivision1.id) self.assertEqual(address.subdivision.id, subdivision1.id)

View File

@ -2,9 +2,9 @@
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of <!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. --> this repository contains the full copyright notices and license terms. -->
<data> <data>
<xpath expr="/form/label[@name='zip']" position="before"> <xpath expr="/form/label[@name='postal_code']" position="before">
<label name="country_zip"/> <label name="location"/>
<field name="country_zip" colspan="3"/> <field name="location" colspan="3"/>
<newline/> <newline/>
</xpath> </xpath>
</data> </data>