diff --git a/CHANGELOG b/CHANGELOG index 16ed15aaab..19facfb55c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,4 @@ +* Replace country and language in address format by codes * Add sequence field to contact mechanism form view Version 5.2.0 - 2019-05-06 diff --git a/address.py b/address.py index 2a4478960e..7e23a9149d 100644 --- a/address.py +++ b/address.py @@ -3,8 +3,8 @@ 'Address' from string import Template -from sql import Null -from sql.conditionals import Case, Coalesce +from sql.conditionals import Coalesce +from sql.functions import Substring from sql.operators import Concat from trytond.i18n import gettext @@ -225,8 +225,8 @@ class Address(DeactivableMixin, sequence_ordered(), ModelSQL, ModelView): class AddressFormat(DeactivableMixin, MatchMixin, ModelSQL, ModelView): "Address Format" __name__ = 'party.address.format' - country = fields.Many2One('country.country', "Country") - language = fields.Many2One('ir.lang', "Language") + country_code = fields.Char("Country Code", size=2) + language_code = fields.Char("Language Code", size=2) format_ = fields.Text("Format", required=True, help="Available variables (also in upper case):\n" "- ${party_name}\n" @@ -245,8 +245,42 @@ class AddressFormat(DeactivableMixin, MatchMixin, ModelSQL, ModelView): @classmethod def __setup__(cls): super(AddressFormat, cls).__setup__() - cls._order.insert(0, ('country', 'ASC')) - cls._order.insert(1, ('language', 'ASC')) + cls._order.insert(0, ('country_code', 'ASC NULLS LAST')) + cls._order.insert(1, ('language_code', 'ASC NULLS LAST')) + + @classmethod + def __register__(cls, module_name): + pool = Pool() + Country = pool.get('country.country') + Language = pool.get('ir.lang') + country = Country.__table__() + language = Language.__table__() + table = cls.__table__() + cursor = Transaction().connection.cursor() + + super().__register__(module_name) + + table_h = cls.__table_handler__() + + # Migration from 5.2: replace country by country_code + if table_h.column_exist('country'): + query = table.update( + [table.country_code], + country.select( + country.code, + where=country.id == table.country)) + cursor.execute(*query) + table_h.drop_column('country') + + # Migration from 5.2: replace language by language_code + if table_h.column_exist('language'): + query = table.update( + [table.language_code], + language.select( + Substring(language.code, 0, 2), + where=language.id == table.language)) + cursor.execute(*query) + table_h.drop_column('language') @classmethod def default_format_(cls): @@ -257,11 +291,6 @@ ${zip} ${city} ${subdivision} ${COUNTRY}""" - @staticmethod - def order_language(tables): - table, _ = tables[None] - return [Case((table.language == Null, 1), else_=0), table.language] - @classmethod def create(cls, *args, **kwargs): records = super(AddressFormat, cls).create(*args, **kwargs) @@ -298,24 +327,13 @@ ${COUNTRY}""" @classmethod def get_format(cls, address, pattern=None): - pool = Pool() - Language = pool.get('ir.lang') - if pattern is None: pattern = {} else: pattern = pattern.copy() pattern.setdefault( - 'country', address.country.id if address.country else None) - - languages = Language.search([ - ('code', '=', Transaction().language), - ], limit=1) - if languages: - language, = languages - else: - language = None - pattern.setdefault('language', language.id if language else None) + 'country_code', address.country.code if address.country else None) + pattern.setdefault('language', Transaction().language[:2]) key = tuple(sorted(pattern.items())) format_ = cls._get_format_cache.get(key) diff --git a/address.xml b/address.xml index e4c1bf57c5..6ae1b06998 100644 --- a/address.xml +++ b/address.xml @@ -86,10 +86,10 @@ this repository contains the full copyright notices and license terms. --> - + - + AR ${party_name} ${name} ${street} @@ -99,7 +99,7 @@ ${COUNTRY} - + AU ${party_name} ${attn} ${name} @@ -110,7 +110,7 @@ ${COUNTRY} - + AT ${party_name} ${attn} ${name} @@ -120,7 +120,7 @@ ${COUNTRY} - + BD ${party_name} ${attn} ${name} @@ -130,7 +130,7 @@ ${COUNTRY} - + BY ${party_name} ${name} ${street} @@ -140,7 +140,7 @@ ${COUNTRY} - + BE ${attn} ${party_name} ${name} @@ -150,7 +150,7 @@ ${COUNTRY} - + BR ${party_name} ${street} ${name} @@ -160,8 +160,8 @@ ${COUNTRY} - - + CA + fr ${attn} ${party_name} ${name} @@ -171,7 +171,7 @@ ${COUNTRY} - + CA ${ATTN} ${PARTY_NAME} ${NAME} @@ -181,7 +181,7 @@ ${COUNTRY} - + CL ${party_name} ${street} ${name} @@ -191,22 +191,22 @@ ${COUNTRY} - - + CN + zh ${COUNTRY} ${ZIP} ${subdivision}${city}${street}${name} ${party_name} - + CN ${COUNTRY} ${ZIP} ${subdivision}, ${city}, ${street}, ${name} ${party_name} - + HR ${party_name} ${street} ${COUNTRY_CODE}-${ZIP} ${city} @@ -214,7 +214,7 @@ ${COUNTRY} - + CZ ${party_name} ${attn} ${street} @@ -223,7 +223,7 @@ ${COUNTRY} - + DK ${party_name} ${street} ${zip} ${city} @@ -231,7 +231,7 @@ ${COUNTRY} - + EE ${party_name} ${street} ${zip} ${city} @@ -239,7 +239,7 @@ ${COUNTRY} - + FI ${attn} ${party_name} ${street} @@ -248,7 +248,7 @@ ${COUNTRY} - + FR ${party_name} ${attn} ${name} @@ -258,7 +258,7 @@ ${COUNTRY} - + DE ${party_name} ${attn} ${name} @@ -268,7 +268,7 @@ ${COUNTRY} - + GR ${party_name} ${street} ${COUNTRY_CODE}-${ZIP} ${CITY} @@ -276,7 +276,7 @@ ${COUNTRY} - + HK ${party_name} ${name} ${street} @@ -285,7 +285,7 @@ ${COUNTRY} - + HU ${party_name} ${city} ${street} @@ -294,7 +294,7 @@ ${COUNTRY} - + IS ${party_name} ${street} ${name} @@ -303,7 +303,7 @@ ${COUNTRY} - + IN ${party_name} ${name} ${street} @@ -313,7 +313,7 @@ ${COUNTRY} - + ID ${party_name} ${name} ${street} @@ -323,7 +323,7 @@ ${COUNTRY} - + IR ${party_name} ${name} ${city} @@ -334,7 +334,7 @@ ${COUNTRY} - + IQ ${party_name} ${street} ${name} @@ -344,7 +344,7 @@ ${COUNTRY} - + IE ${party_name} ${street} ${city} ${zip} @@ -352,7 +352,7 @@ ${COUNTRY} - + IL ${party_name} ${street} ${city} ${zip} @@ -360,7 +360,7 @@ ${COUNTRY} - + IT ${party_name} ${attn} ${name} @@ -369,38 +369,34 @@ ${zip} ${city} ${SUBDIVISION_CODE} ${COUNTRY} - - + JP ${party_name} ${street} ${city}, ${SUBDIVISION} ${zip} ${COUNTRY} - - + KR ${party_name} ${street} ${city}, ${subdivision} ${zip} @@ -408,7 +404,7 @@ ${COUNTRY} - + LV ${party_name} ${street} ${city} @@ -418,8 +414,8 @@ ${COUNTRY} - - + MO + zh ${COUNTRY} ${city} ${street} @@ -427,7 +423,7 @@ ${party_name} - + MO ${party_name} ${street} ${city} @@ -435,7 +431,7 @@ ${COUNTRY} - + MY ${attn} ${party_name} ${name} @@ -446,7 +442,7 @@ ${COUNTRY} - + MX ${attn} ${party_name} ${street} @@ -456,7 +452,7 @@ ${COUNTRY} - + NL ${party_name} ${attn} ${name} @@ -466,7 +462,7 @@ ${COUNTRY} - + NZ ${party_name} ${street} ${city} ${zip} @@ -474,7 +470,7 @@ ${COUNTRY} - + NO ${party_name} ${street} ${zip} ${CITY} @@ -482,7 +478,7 @@ ${COUNTRY} - + OM ${party_name} ${street} ${city} @@ -490,7 +486,7 @@ ${COUNTRY} - + PK ${party_name} ${street} ${city} @@ -500,7 +496,7 @@ ${COUNTRY} - + PE ${party_name} ${street} ${name} @@ -510,7 +506,7 @@ ${COUNTRY} - + PH ${party_name} ${street} ${zip} ${CITY} @@ -518,7 +514,7 @@ ${COUNTRY} - + PL ${attn} ${party_name} ${street} ${zip} ${city} @@ -526,7 +522,7 @@ ${COUNTRY} - + PT ${party_name} ${street} ${zip} ${city} @@ -534,7 +530,7 @@ ${COUNTRY} - + QA ${party_name} ${street} ${city} @@ -542,7 +538,7 @@ ${COUNTRY} - + RO ${attn} ${party_name} ${street} ${city} @@ -551,7 +547,7 @@ ${COUNTRY} - + RU ${party_name} ${street} ${city} @@ -561,7 +557,7 @@ ${zip} - + SA ${party_name} ${street} ${city} ${zip} @@ -569,7 +565,7 @@ ${COUNTRY} - + RS ${party_name} ${street} ${zip} ${city} @@ -577,7 +573,7 @@ ${COUNTRY} - + SG ${party_name} ${street} ${name} @@ -586,7 +582,7 @@ ${COUNTRY} - + SK ${attn} ${party_name} ${street} @@ -595,7 +591,7 @@ ${COUNTRY} - + SL ${party_name} ${attn} ${street} @@ -604,7 +600,7 @@ ${COUNTRY} - + ES ${party_name} ${street} ${zip} ${city} @@ -613,7 +609,7 @@ ${COUNTRY} - + LK ${party_name} ${street} ${CITY} @@ -622,7 +618,7 @@ ${COUNTRY} - + SE ${party_name} ${street} ${zip} ${city} @@ -630,7 +626,7 @@ ${COUNTRY} - + CH ${party_name} ${street} ${zip} ${city} @@ -638,8 +634,8 @@ ${COUNTRY} - - + TW + zh ${COUNTRY} ${zip} ${street} @@ -647,7 +643,7 @@ ${party_name} - + TW ${party_name} ${street} ${city}, ${subdivision} ${zip} @@ -655,7 +651,7 @@ ${COUNTRY} - + TH ${party_name} ${street} ${name} @@ -665,7 +661,7 @@ ${zip} - + TR ${party_name} ${attn} ${street} @@ -675,7 +671,7 @@ ${COUNTRY} - + UA ${party_name} ${street} ${city} @@ -685,7 +681,7 @@ ${COUNTRY} - + GB ${party_name} ${street} ${CITY} @@ -694,7 +690,7 @@ ${COUNTRY} - + US ${attn} ${party_name} ${street} @@ -703,7 +699,7 @@ ${COUNTRY} - + VN ${party_name} ${street} ${city} diff --git a/view/address_format_form.xml b/view/address_format_form.xml index 281ce21adf..a88c943070 100644 --- a/view/address_format_form.xml +++ b/view/address_format_form.xml @@ -1,11 +1,11 @@
-