Add 3-letters and numeric code

issue5195
review23681002
This commit is contained in:
Nicolas Évrard committed 2016-03-23 11:49:00 +01:00
1 parent 990858ed23
commit f1ebdf1ca9
5 files changed
+529 -10

No files matched your search

+1
View File
@@ -1,3 +1,4 @@
* Add 3-letters and numeric code
* Add Python3 support
Version 3.8.0 - 2015-11-02
+23 -9
View File
@@ -14,7 +14,13 @@ class Country(ModelSQL, ModelView):
help='The full name of the country.', select=True)
code = fields.Char('Code', size=2, select=True,
help='The ISO country code in two chars.\n'
'You can use this field for quick search.', required=True)
'You can use this field for quick search.')
code3 = fields.Char('3-letters Code', size=3, select=True,
help=('The ISO country code in three chars.\n'
'You can use this field for quick search.'))
code_numeric = fields.Char('Numeric Code', select=True,
help=('The ISO numeric country code.\n'
'You can use this field for quick search.'))
subdivisions = fields.One2Many('country.subdivision',
'country', 'Subdivisions')
@@ -34,18 +40,25 @@ class Country(ModelSQL, ModelView):
table.drop_constraint('name_uniq')
table.drop_constraint('code_uniq')
# Migration from 3.8: remove required on code
table.not_null_action('code', 'remove')
@classmethod
def search_rec_name(cls, name, clause):
if cls.search([('code',) + tuple(clause[1:])], limit=1):
return [('code',) + tuple(clause[1:])]
return [(cls._rec_name,) + tuple(clause[1:])]
return ['OR',
('name',) + tuple(clause[1:]),
('code',) + tuple(clause[1:]),
('code3',) + tuple(clause[1:]),
('code_numeric',) + tuple(clause[1:]),
]
@classmethod
def create(cls, vlist):
vlist = [x.copy() for x in vlist]
for vals in vlist:
if 'code' in vals and vals['code']:
vals['code'] = vals['code'].upper()
for code in {'code', 'code3', 'code_numeric'}:
if code in vals and vals[code]:
vals[code] = vals[code].upper()
return super(Country, cls).create(vlist)
@classmethod
@@ -53,9 +66,10 @@ class Country(ModelSQL, ModelView):
actions = iter(args)
args = []
for countries, values in zip(actions, actions):
if values.get('code'):
values = values.copy()
values['code'] = values['code'].upper()
for code in {'code', 'code3', 'code_numeric'}:
if values.get(code):
values = values.copy()
values[code] = values[code].upper()
args.extend((countries, values))
super(Country, cls).write(*args)
+498
View File
File diff suppressed because it is too large. Load diff
+3 -1
View File
@@ -11,8 +11,10 @@ for country in pycountry.countries:
<record model="country.country" id="%s">
<field name="name">%s</field>
<field name="code">%s</field>
<field name="code3">%s</field>
<field name="code_numeric">%s</field>
</record>\n''' % (country.alpha2.lower(), country.name,
country.alpha2)
country.alpha2, country.alpha3, country.numeric)
sys.stdout.write(record.encode('utf-8'))
sys.stdout.write(u' </data>\n')
+4
View File
@@ -6,5 +6,9 @@ this repository contains the full copyright notices and license terms. -->
<field name="name"/>
<label name="code"/>
<field name="code"/>
<label name="code3"/>
<field name="code3"/>
<label name="code_numeric"/>
<field name="code_numeric"/>
<field name="subdivisions" colspan="4"/>
</form>