Added supplementary check for CUIT number of ar localflavor

Thanks Kevin Schaul for the initial patch.
This commit is contained in:
Claude Paroz 2012-07-09 14:07:01 +02:00
parent 1d2982362d
commit d9db1d3373
2 changed files with 8 additions and 3 deletions

View File

@ -81,6 +81,7 @@ class ARCUITField(RegexField):
default_error_messages = { default_error_messages = {
'invalid': _('Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format.'), 'invalid': _('Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format.'),
'checksum': _("Invalid CUIT."), 'checksum': _("Invalid CUIT."),
'legal_type': _('Invalid legal type. Type must be 27, 20, 23 or 30.'),
} }
def __init__(self, max_length=None, min_length=None, *args, **kwargs): def __init__(self, max_length=None, min_length=None, *args, **kwargs):
@ -96,6 +97,8 @@ class ARCUITField(RegexField):
if value in EMPTY_VALUES: if value in EMPTY_VALUES:
return '' return ''
value, cd = self._canon(value) value, cd = self._canon(value)
if not value[:2] in ['27', '20', '23', '30']:
raise ValidationError(self.error_messages['legal_type'])
if self._calc_cd(value) != cd: if self._calc_cd(value) != cd:
raise ValidationError(self.error_messages['checksum']) raise ValidationError(self.error_messages['checksum'])
return self._format(value, cd) return self._format(value, cd)

View File

@ -81,6 +81,7 @@ class ARLocalFlavorTests(SimpleTestCase):
def test_ARCUITField(self): def test_ARCUITField(self):
error_format = ['Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format.'] error_format = ['Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format.']
error_invalid = ['Invalid CUIT.'] error_invalid = ['Invalid CUIT.']
error_legal_type = [u'Invalid legal type. Type must be 27, 20, 23 or 30.']
valid = { valid = {
'20-10123456-9': '20-10123456-9', '20-10123456-9': '20-10123456-9',
'20-10123456-9': '20-10123456-9', '20-10123456-9': '20-10123456-9',
@ -94,8 +95,9 @@ class ARLocalFlavorTests(SimpleTestCase):
'210123456-9': error_format, '210123456-9': error_format,
'20-10123456': error_format, '20-10123456': error_format,
'20-10123456-': error_format, '20-10123456-': error_format,
'20-10123456-5': error_invalid, '20-10123456-5': error_invalid,
'27-10345678-1': error_invalid, '27-10345678-1': error_invalid,
'27-10345678-1': error_invalid, '27-10345678-1': error_invalid,
'11211111110': error_legal_type,
} }
self.assertFieldOutput(ARCUITField, valid, invalid) self.assertFieldOutput(ARCUITField, valid, invalid)