diff --git a/django/contrib/localflavor/pe/__init__.py b/django/contrib/localflavor/pe/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/django/contrib/localflavor/pe/forms.py b/django/contrib/localflavor/pe/forms.py new file mode 100644 index 00000000000..b1ae2154171 --- /dev/null +++ b/django/contrib/localflavor/pe/forms.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +""" +PE-specific Form helpers. +""" + +from django.newforms import ValidationError +from django.newforms.fields import RegexField, CharField, Select, EMPTY_VALUES +from django.utils.translation import ugettext + +class PEDepartmentSelect(Select): + """ + A Select widget that uses a list of Peruvian Departments as its choices. + """ + def __init__(self, attrs=None): + from pe_department import DEPARTMENT_CHOICES + super(PEDepartmentSelect, self).__init__(attrs, choices=DEPARTMENT_CHOICES) + +class PEDNIField(CharField): + """ + A field that validates `Documento Nacional de IdentidadŽ (DNI) numbers. + """ + def __init__(self, *args, **kwargs): + super(PEDNIField, self).__init__(max_length=8, min_length=8, *args, + **kwargs) + + def clean(self, value): + """ + Value must be a string in the XXXXXXXX formats. + """ + value = super(PEDNIField, self).clean(value) + if value in EMPTY_VALUES: + return u'' + if not value.isdigit(): + raise ValidationError(ugettext("This field requires only numbers.")) + if len(value) != 8: + raise ValidationError(ugettext("This field requires 8 digits.")) + + return value + +class PERUCField(RegexField): + """ + This field validates a RUC (Registro Unico de Contribuyentes). A RUC is of + the form XXXXXXXXXXX. + """ + def __init__(self, *args, **kwargs): + super(PERUCField, self).__init__(max_length=11, min_length=11, *args, + **kwargs) + + def clean(self, value): + """ + Value must be an 11-digit number. + """ + value = super(PERUCField, self).clean(value) + if value in EMPTY_VALUES: + return u'' + if not value.isdigit(): + raise ValidationError(ugettext("This field requires only numbers.")) + if len(value) != 11: + raise ValidationError(ugettext("This field requires 11 digits.")) + return value + diff --git a/django/contrib/localflavor/pe/pe_department.py b/django/contrib/localflavor/pe/pe_department.py new file mode 100644 index 00000000000..d7fa65f9cbb --- /dev/null +++ b/django/contrib/localflavor/pe/pe_department.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +""" +A list of Peru departaments as `choices` in a +formfield. + +This exists in this standalone file so that it's only imported into memory +when explicitly needed. +""" + +DEPARTMENT_CHOICES = ( + ('AMA', u'Amazonas'), + ('ANC', u'Ancash'), + ('APU', u'Apurímac'), + ('ARE', u'Arequipa'), + ('AYA', u'Ayacucho'), + ('CAJ', u'Cajamarca'), + ('CUS', u'Cusco'), + ('HUV', u'Huancavelica'), + ('HUC', u'Huánuco'), + ('ICA', u'Ica'), + ('JUN', u'Junín'), + ('LAL', u'La Libertad'), + ('LAM', u'Lambayeque'), + ('LIM', u'Lima'), + ('LOR', u'Loreto'), + ('MDD', u'Madre de Dios'), + ('MOQ', u'Moquegua'), + ('PAS', u'Pasco'), + ('PIU', u'Piura'), + ('PUN', u'Puno'), + ('SAM', u'San Martín'), + ('TAC', u'Tacna'), + ('TUM', u'Tumbes'), + ('UCA', u'Ucayali'), +)