app/django/contrib/localflavor/pe/forms.py
changeset 54 03e267d67478
child 323 ff1a9aa48cfd
equal deleted inserted replaced
53:57b4279d8c4e 54:03e267d67478
       
     1 # -*- coding: utf-8 -*-
       
     2 """
       
     3 PE-specific Form helpers.
       
     4 """
       
     5 
       
     6 from django.newforms import ValidationError
       
     7 from django.newforms.fields import RegexField, CharField, Select, EMPTY_VALUES
       
     8 from django.utils.translation import ugettext
       
     9 
       
    10 class PEDepartmentSelect(Select):
       
    11     """
       
    12     A Select widget that uses a list of Peruvian Departments as its choices.
       
    13     """
       
    14     def __init__(self, attrs=None):
       
    15         from pe_department import DEPARTMENT_CHOICES
       
    16         super(PEDepartmentSelect, self).__init__(attrs, choices=DEPARTMENT_CHOICES)
       
    17 
       
    18 class PEDNIField(CharField):
       
    19     """
       
    20     A field that validates `Documento Nacional de IdentidadŽ (DNI) numbers.
       
    21     """
       
    22     default_error_messages = {
       
    23         'invalid': ugettext("This field requires only numbers."),
       
    24         'max_digits': ugettext("This field requires 8 digits."),
       
    25     }
       
    26 
       
    27     def __init__(self, *args, **kwargs):
       
    28         super(PEDNIField, self).__init__(max_length=8, min_length=8, *args,
       
    29                 **kwargs)
       
    30 
       
    31     def clean(self, value):
       
    32         """
       
    33         Value must be a string in the XXXXXXXX formats.
       
    34         """
       
    35         value = super(PEDNIField, self).clean(value)
       
    36         if value in EMPTY_VALUES:
       
    37             return u''
       
    38         if not value.isdigit():
       
    39             raise ValidationError(self.error_messages['invalid'])
       
    40         if len(value) != 8:
       
    41             raise ValidationError(self.error_messages['max_digits'])
       
    42 
       
    43         return value
       
    44 
       
    45 class PERUCField(RegexField):
       
    46     """
       
    47     This field validates a RUC (Registro Unico de Contribuyentes). A RUC is of
       
    48     the form XXXXXXXXXXX.
       
    49     """
       
    50     default_error_messages = {
       
    51         'invalid': ugettext("This field requires only numbers."),
       
    52         'max_digits': ugettext("This field requires 11 digits."),
       
    53     }
       
    54 
       
    55     def __init__(self, *args, **kwargs):
       
    56         super(PERUCField, self).__init__(max_length=11, min_length=11, *args,
       
    57             **kwargs)
       
    58 
       
    59     def clean(self, value):
       
    60         """
       
    61         Value must be an 11-digit number.
       
    62         """
       
    63         value = super(PERUCField, self).clean(value)
       
    64         if value in EMPTY_VALUES:
       
    65             return u''
       
    66         if not value.isdigit():
       
    67             raise ValidationError(self.error_messages['invalid'])
       
    68         if len(value) != 11:
       
    69             raise ValidationError(self.error_messages['max_digits'])
       
    70         return value
       
    71