diff options
| author | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2007-09-13 22:16:59 +0000 |
|---|---|---|
| committer | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2007-09-13 22:16:59 +0000 |
| commit | a9fd677cb3167afbe0b27bf1a8fe5a16eaad5908 (patch) | |
| tree | efbc951af528624ecc193a98c20f5e967a4aaa4e /django | |
| parent | da7495cfa51ff2eb0f07d6812e22f9029d388fab (diff) | |
Fixed #5403 -- Added Dutch localflavor. Thanks, Jan Rademaker.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@6139 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
| -rw-r--r-- | django/contrib/localflavor/nl/__init__.py | 0 | ||||
| -rw-r--r-- | django/contrib/localflavor/nl/forms.py | 92 | ||||
| -rw-r--r-- | django/contrib/localflavor/nl/nl_provinces.py | 16 |
3 files changed, 108 insertions, 0 deletions
diff --git a/django/contrib/localflavor/nl/__init__.py b/django/contrib/localflavor/nl/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/django/contrib/localflavor/nl/__init__.py diff --git a/django/contrib/localflavor/nl/forms.py b/django/contrib/localflavor/nl/forms.py new file mode 100644 index 0000000000..e202ab0595 --- /dev/null +++ b/django/contrib/localflavor/nl/forms.py @@ -0,0 +1,92 @@ +""" +NL-specific Form helpers +""" + +import re + +from django.newforms import ValidationError +from django.newforms.fields import Field, Select, EMPTY_VALUES +from django.utils.translation import ugettext as _ +from django.utils.encoding import smart_unicode + +pc_re = re.compile('^\d{4}[A-Z]{2}$') +sofi_re = re.compile('^\d{9}$') +numeric_re = re.compile('^\d+$') + +class NLZipCodeField(Field): + """ + A Dutch postal code field. + """ + def clean(self, value): + super(NLZipCodeField, self).clean(value) + if value in EMPTY_VALUES: + return u'' + + msg = _('Enter a valid postal code') + value = value.strip().upper().replace(' ', '') + if not pc_re.search(value): + raise ValidationError(msg) + + if int(value[:4]) < 1000: + raise ValidationError(msg) + + return u'%s %s' % (value[:4], value[4:]) + +class NLProvinceSelect(Select): + """ + A Select widget that uses a list of provinces of the Netherlands as its + choices. + """ + def __init__(self, attrs=None): + from nl_provinces import PROVINCE_CHOICES + super(NLProvinceSelect, self).__init__(attrs, choices=PROVINCE_CHOICES) + +class NLPhoneNumberField(Field): + """ + A Dutch telephone number field. + """ + def clean(self, value): + super(NLPhoneNumberField, self).clean(value) + if value in EMPTY_VALUES: + return u'' + + msg = _('Enter a valid phone number') + phone_nr = re.sub('[\-\s\(\)]', '', smart_unicode(value)) + + if len(phone_nr) == 10 and numeric_re.search(phone_nr): + return value + + if phone_nr[:3] == '+31' and len(phone_nr) == 12 and \ + numeric_re.search(phone_nr[3:]): + return value + + raise ValidationError(msg) + +class NLSoFiNumberField(Field): + """ + A Dutch social security number (SoFi/BSN) field. + + http://nl.wikipedia.org/wiki/Sofinummer + """ + def clean(self, value): + super(NLSoFiNumberField, self).clean(value) + if value in EMPTY_VALUES: + return u'' + + msg = _('Enter a valid SoFi number') + + if not sofi_re.search(value): + raise ValidationError(msg) + + if int(value) == 0: + raise ValidationError(msg) + + checksum = 0 + for i in range(9, 1, -1): + checksum += int(value[9-i]) * i + checksum -= int(value[-1]) + + if checksum % 11 != 0: + raise ValidationError(msg) + + return value diff --git a/django/contrib/localflavor/nl/nl_provinces.py b/django/contrib/localflavor/nl/nl_provinces.py new file mode 100644 index 0000000000..8964adfac0 --- /dev/null +++ b/django/contrib/localflavor/nl/nl_provinces.py @@ -0,0 +1,16 @@ +from django.utils.translation import ugettext_lazy as _ + +PROVINCE_CHOICES = ( + ('DR', _('Drente')), + ('FL', _('Flevoland')), + ('FR', _('Friesland')), + ('GL', _('Gelderland')), + ('GR', _('Groningen')), + ('LB', _('Limburg')), + ('NB', _('Noord-Brabant')), + ('NH', _('Noord-Holland')), + ('OV', _('Overijssel')), + ('UT', _('Utrecht')), + ('ZE', _('Zeeland')), + ('ZH', _('Zuid-Holland')), +) |
