ó
ø¢TQc           @@ s  d  Z  d d l m Z m Z d d l Z d d l m Z d d l m Z d d l	 m
 Z
 d d l m Z m Z m Z d d l m Z d d	 l m Z e j d
 ƒ Z e j d ƒ Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   u   
Swiss-specific Form helpers
i    (   t   absolute_importt   unicode_literalsN(   t   STATE_CHOICES(   t   EMPTY_VALUES(   t   ValidationError(   t   Fieldt
   RegexFieldt   Select(   t
   smart_text(   t   ugettext_lazyu;   ^(?P<idnumber>\w{8})(?P<pos9>(\d{1}|<))(?P<checksum>\d{1})$u   ^0([1-9]{1})\d{8}$t   CHZipCodeFieldc           B@ s*   e  Z i e d  ƒ d 6Z d d d „ Z RS(   u$   Enter a zip code in the format XXXX.u   invalidc         O@ s&   t  t |  ƒ j d | | | | Ž d  S(   Nu   ^\d{4}$(   t   superR
   t   __init__(   t   selft
   max_lengtht
   min_lengtht   argst   kwargs(    (    s<   ../Django//lib/python/django/contrib/localflavor/ch/forms.pyR      s    N(   t   __name__t
   __module__t   _t   default_error_messagest   NoneR   (    (    (    s<   ../Django//lib/python/django/contrib/localflavor/ch/forms.pyR
      s   t   CHPhoneNumberFieldc           B@ s*   e  Z d  Z i e d ƒ d 6Z d „  Z RS(   uÇ   
    Validate local Swiss phone number (not international ones)
    The correct format is '0XX XXX XX XX'.
    '0XX.XXX.XX.XX' and '0XXXXXXXXX' validate but are corrected to
    '0XX XXX XX XX'.
    u.   Phone numbers must be in 0XX XXX XX XX format.u   invalidc         C@ s   t  t |  ƒ j | ƒ | t k r& d St j d d t | ƒ ƒ } t j | ƒ } | r† d | d d !| d d !| d d !| d d !f St	 |  j
 d	 ƒ ‚ d  S(
   Nu    u   (\.|\s|/|-)u   %s %s %s %si    i   i   i   i
   u   invalid(   R   R   t   cleanR   t   ret   subR   t   phone_digits_ret   searchR   t   error_messages(   R   t   valuet   m(    (    s<   ../Django//lib/python/django/contrib/localflavor/ch/forms.pyR   (   s    0(   R   R   t   __doc__R   R   R   (    (    (    s<   ../Django//lib/python/django/contrib/localflavor/ch/forms.pyR      s   t   CHStateSelectc           B@ s   e  Z d  Z d d „ Z RS(   uG   
    A Select widget that uses a list of CH states as its choices.
    c         C@ s    t  t |  ƒ j | d t ƒd  S(   Nt   choices(   R   R!   R   R   (   R   t   attrs(    (    s<   ../Django//lib/python/django/contrib/localflavor/ch/forms.pyR   6   s    N(   R   R   R    R   R   (    (    (    s<   ../Django//lib/python/django/contrib/localflavor/ch/forms.pyR!   2   s   t   CHIdentityCardNumberFieldc           B@ s3   e  Z d  Z i e d ƒ d 6Z d „  Z d „  Z RS(   uæ   
    A Swiss identity card number.

    Checks the following rules to determine whether the number is valid:

        * Conforms to the X1234567<0 or 1234567890 format.
        * Included checksums match calculated checksums

    uX   Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format.u   invalidc         C@ s>  | d  | d } } | } d } d } d } t  | d  ƒ } | j ƒ  r  t | j ƒ  ƒ d }	 |	 d k  sw |	 d k r{ t St  |	 ƒ | d } | d  d } n  | j ƒ  s° t Sxw t t | ƒ ƒ D]c }
 t | |
 ƒ | } | | 7} | d k rü d } qÃ | d	 k rd } qÃ | d k rÃ d	 } qÃ qÃ Wt  | ƒ d | k S(
   Niÿÿÿÿi    u    i   i   iA   i   u   0i   (	   t   strt   isalphat   ordt   uppert   Falset   isdigitt   ranget   lent   int(   R   t   numbert   given_numbert   given_checksumt
   new_numbert   calculated_checksumt   fragmentt	   parametert   firstt   numt   i(    (    s<   ../Django//lib/python/django/contrib/localflavor/ch/forms.pyt   has_valid_checksumG   s0    
		c         C@ sý   t  t |  ƒ j | ƒ | t k r& d St j t | ƒ } | sT t |  j d ƒ ‚ n  | j	 ƒ  d | j	 ƒ  d | j	 ƒ  d } } } | d k sž | d k r´ t |  j d ƒ ‚ n  d | | | f } |  j
 | ƒ sì t |  j d ƒ ‚ n  d | | | f S(	   Nu    u   invalidu   idnumberu   pos9u   checksumu   00000000u   A0000000u   %s%s%s(   R   R$   R   R   R   t   matcht   id_reR   R   t	   groupdictR8   (   R   R   R9   t   idnumbert   pos9t   checksumt
   all_digits(    (    s<   ../Django//lib/python/django/contrib/localflavor/ch/forms.pyR   f   s    2(   R   R   R    R   R   R8   R   (    (    (    s<   ../Django//lib/python/django/contrib/localflavor/ch/forms.pyR$   9   s
   		(   R    t
   __future__R    R   R   t'   django.contrib.localflavor.ch.ch_statesR   t   django.core.validatorsR   t   django.formsR   t   django.forms.fieldsR   R   R   t   django.utils.encodingR   t   django.utils.translationR	   R   t   compileR:   R   R
   R   R!   R$   (    (    (    s<   ../Django//lib/python/django/contrib/localflavor/ch/forms.pyt   <module>   s   	