Beispiel #1
0
    class RepresentanteForm(forms.ModelForm):

        Nombre = forms.CharField(label="Nombre (*)")
        Apellido = forms.CharField(label="Apellido (*)")
        Telefono = forms.CharField(label="Teléfono", required=False)
        Email = forms.CharField(label="E-mail", required=False)

        class Meta:
            exclude = ['Baja']
            model = Representante
            widgets = {
                'Zona':
                forms.Select(choices=[('Sur', 'Sur'), ('Norte', 'Norte')])
            }

        if not edit:
            NroLegajo = forms.IntegerField(label="Nro. Legajo (*)")
            DNI = ARDNIField(label="DNI (*)")
        else:
            NroLegajo = forms.IntegerField(label="Nro. Legajo (*)",
                                           widget=forms.HiddenInput())
            DNI = ARDNIField(label="DNI (*)", widget=forms.HiddenInput())

        def __init__(self, *args, **kwargs):
            super(RepresentanteForm, self).__init__(*args, **kwargs)
            self.helper = FormHelper()
            self.helper.form_class = 'form-horizontal'
            self.helper.label_class = 'col-lg-2'
            self.helper.field_class = 'col-lg-8'
            self.helper.layout = Layout(
                Fieldset(
                    '<font color = "Black" size=3 face="Arial">Datos de representante </font>',
                    Field('Nombre',
                          css_class=".col-lg-3",
                          placeholder='Nombre'),
                    Field('Apellido', placeholder="Apellido"),
                    Field('DNI', placeholder="DNI"),
                    Field('NroLegajo', placeholder="Nro. Legajo"),
                    Field('Email', placeholder="E-mail"),
                    Field('Telefono', placeholder="Teléfono"),
                    Field('Zona', placeholder="Zona"),
                ),
                HTML('<p>(*)Campos obligatorios.</p>'),
            )

        def setup(self, *args, **kwarg):
            self.helper.add_input(Submit('submit', *args, **kwarg))
            self.helper.add_input(
                Button('cancelar',
                       'Cancelar',
                       css_class="btn btn-default",
                       onClick="window.location = '/listadoRepresentante'"))
Beispiel #2
0
class FiscalForm(forms.ModelForm):

    dni = ARDNIField(required=False)

    class Meta:
        model = Fiscal
        exclude = []
Beispiel #3
0
class Paciente(models.Model):
    nombre = models.CharField(
        max_length=50,
        validators=[
            MinLengthValidator(
                2, "El nombre debe contener al menos 2 caracteres")
        ])
    apellido = models.CharField(
        max_length=50,
        validators=[
            MinLengthValidator(
                2, "El apellido debe contener al menos 2 caracteres")
        ])
    dni = ARDNIField(max_length=10, min_length=7)
    fecha_nacimiento = models.DateField()
    email = models.EmailField()
    telefono = models.PhoneNumberField()
    direccion = models.CharField(max_length=50)
    localidad = models.CharField(max_length=50)
    obra_social = models.ForeignKey(ObraSocial,
                                    on_delete=models.CASCADE,
                                    null=True)

    def __str__(self):
        return f'{self.apellido}, {self.nombre}'
Beispiel #4
0
class VoluntarioForm(forms.ModelForm):

    dni = ARDNIField(required=False)

    class Meta:
        model = Voluntario
        exclude = []
Beispiel #5
0
    class ProductorForm(forms.ModelForm):

        Nombre = forms.CharField(label="Nombre (*)")
        Apellido = forms.CharField(label="Apellido (*)")
        Email = forms.CharField(label="E-mail", required=False)
        Telefono = forms.CharField(label="Teléfono", required=False)

        class Meta:
            model = Productor
            exclude = ['Baja']

        if not edit:
            DNI = ARDNIField(label="DNI (*)")
            CUIL = ARCUITField(label="CUIL (*)")

        else:
            DNI = ARDNIField(label="DNI (*)", widget=forms.HiddenInput())
            CUIL = ARCUITField(label="CUIL (*)", widget=forms.HiddenInput())

        def __init__(self, *args, **kwargs):
            super(ProductorForm, self).__init__(*args, **kwargs)
            self.helper = FormHelper()
            self.helper.form_class = 'form-horizontal'
            self.helper.label_class = 'col-lg-2'
            self.helper.field_class = 'col-lg-8'
            self.helper.layout = Layout(
                Fieldset(
                    '<font color = "Black" size=3 face="Arial">Datos de productor </font>',
                    Field('Nombre',
                          css_class=".col-lg-3",
                          placeholder='Nombre'),
                    Field('Apellido', placeholder="Apellido"),
                    Field('DNI', placeholder="DNI"),
                    Field('CUIL', placeholder="CUIL XX-XXXXXXXX-X"),
                    Field('Email', placeholder="E-mail"),
                    Field('Telefono', placeholder="Teléfono"),
                ),
                HTML('<p>(*)Campos obligatorios.</p>'),
            )

        def setup(self, *args, **kwarg):
            self.helper.add_input(Submit('submibl', *args, **kwarg))
            self.helper.add_input(
                Button('cancelar',
                       'Cancelar',
                       css_class="btn btn-default",
                       onClick="window.location = '/listadoProductores'"))
Beispiel #6
0
class QuieroSerFiscal1(forms.Form):
    dni = ARDNIField(required=True, help_text='Ingresá tu Nº de documento')
    email = forms.EmailField(required=True)
    email2 = forms.EmailField(required=True, label="Confirmar email")

    layout = Layout('dni', Row('email', 'email2'))

    def clean(self):
        cleaned_data = super().clean()
        email = cleaned_data.get('email')
        email2 = cleaned_data.get('email2')
        if email and email2 and email != email2:
            self.add_error('email', 'Los emails no coinciden')
            self.add_error('email2', 'Los emails no coinciden')
Beispiel #7
0
class FiscalxDNI(forms.ModelForm):
    dni = ARDNIField(required=True)
Beispiel #8
0
class QuieroSerFiscalForm(forms.Form):

    MENSAJE_ERROR_CODIGO_REF = 'Codigo de referido debe ser de 4 letras y/o números.'
    MENSAJE_ERROR_TELEFONO_INVALIDO = 'Teléfono no es válido. Chequeá código de área y teléfono.'
    MENSAJE_ERROR_DNI_REPETIDO = 'Ya se encuentra un usuario registrado con ese DNI.'
    MENSAJE_ERROR_PASSWORD_NO_IGUALES = "Las contraseñas no coinciden."
    MENSAJE_ERROR_EMAIL_REPETIDO = 'Ya existe ese correo. Intentá recuperando la contraseña'

    CARACTERES_REF_CODIGO = 4
    CANTIDAD_DIGITOS_NUMERACION_ARGENTINA = 10

    MAX_DIGITOS_TELEFONO_LOCAL = 8
    MIN_DIGITOS_TELEFONO_LOCAL = 5
    MAX_DIGITOS_COD_AREA = 5
    MIN_DIGITOS_COD_AREA = 2

    email = forms.EmailField(required=True)
    email_confirmacion = forms.EmailField(required=True,
                                          label="Confirmar email")
    apellido = forms.CharField(required=True, label="Apellido", max_length=50)
    nombres = forms.CharField(required=True, label="Nombres", max_length=100)
    dni = ARDNIField(required=True,
                     label="DNI",
                     help_text='Ingresá tu Nº de documento sin puntos.')
    telefono_area = forms.CharField(
        label='Código de área (sin 0 adelante).',
        help_text=
        'Por ejemplo: 11 para CABA, 221 para La Plata, 351 para Córdoba, etc.',
        required=True,
        validators=[
            MaxLengthValidator(MAX_DIGITOS_COD_AREA),
            MinLengthValidator(MIN_DIGITOS_COD_AREA),
        ])
    telefono_local = forms.CharField(
        label='Teléfono',
        help_text='Ingresá tu teléfono sin el 15, ni guiones ni espacios.',
        required=True,
        validators=[
            MaxLengthValidator(MAX_DIGITOS_TELEFONO_LOCAL),
            MinLengthValidator(MIN_DIGITOS_TELEFONO_LOCAL),
        ])

    distrito = forms.ModelChoiceField(
        required=True,
        label='Provincia',
        queryset=Distrito.objects.all().order_by('numero'),
        widget=autocomplete.ModelSelect2(url='autocomplete-distrito-simple', ),
    )

    seccion = forms.ModelChoiceField(
        queryset=Seccion.objects.all(),
        required=False,
        widget=autocomplete.ModelSelect2(url='autocomplete-seccion-simple',
                                         forward=['distrito']),
    )

    referente_nombres = forms.CharField(
        required=False,
        label="Nombre del referente",
        max_length=100,
        help_text="Si no tenés, dejalo en blanco.")
    referente_apellido = forms.CharField(
        required=False,
        label="Apellido del referente",
        max_length=50,
        help_text="Si no tenés, dejalo en blanco.")

    referido_por_codigo = forms.CharField(
        required=False,
        label="Código de referencia",
        help_text="Si no sabes qué es, dejalo en blanco.")

    password = forms.CharField(
        label='Elegí una contraseña',
        help_text='No uses la de tu email o redes sociales',
        widget=forms.PasswordInput,
        strip=False,
    )
    password_confirmacion = forms.CharField(
        label='Repetir la contraseña',
        strip=False,
        widget=forms.PasswordInput,
    )

    layout = Layout(
        Fieldset('Datos personales', Row('nombres', 'apellido', 'dni'),
                 Row('email', 'email_confirmacion'),
                 Row('password', 'password_confirmacion'),
                 Row('distrito', 'seccion')),
        Fieldset('Teléfono celular', Row('telefono_area', 'telefono_local')),
        Fieldset(
            'Referencia',
            Row('referente_nombres', 'referente_apellido',
                'referido_por_codigo')))

    def clean(self):
        cleaned_data = super().clean()
        self.validar_correo(cleaned_data)
        self.validar_telefono(cleaned_data.get('telefono_area'),
                              cleaned_data.get('telefono_local'))

    def clean_telefono_area(self):
        telefono_area = self.cleaned_data.get('telefono_area')
        if telefono_area:
            # por las dudas, sacamos los 0 a la izquierda del código de área
            telefono_area = telefono_area.lstrip('0')
        return telefono_area

    def validar_correo(self, cleaned_data):
        email = cleaned_data.get('email')
        email2 = cleaned_data.get('email_confirmacion')
        if email and email2 and email != email2:
            self.add_error('email', 'Los emails no coinciden')
            self.add_error('email_confirmacion', 'Los emails no coinciden')

        if User.objects.filter(email=email).exists():
            self.add_error('email', self.MENSAJE_ERROR_EMAIL_REPETIDO)

    def validar_telefono(self, telefono_area, telefono_local):
        if telefono_area and telefono_local:
            cantidad_digitos_telefono = len(telefono_area) + len(
                telefono_local)
            if cantidad_digitos_telefono != self.CANTIDAD_DIGITOS_NUMERACION_ARGENTINA:
                error = (
                    "Revisá el código de área y teléfono."
                    f"Entre ambos deben ser {self.CANTIDAD_DIGITOS_NUMERACION_ARGENTINA} números"
                )
                self.add_error('telefono_area', error)
                self.add_error('telefono_local', error)
            telefono = telefono_area + telefono_local
            valor = phonenumbers.parse(telefono, 'AR')
            if not phonenumbers.is_valid_number(valor):
                self.add_error('telefono_local',
                               self.MENSAJE_ERROR_TELEFONO_INVALIDO)
                self.add_error('telefono_area',
                               self.MENSAJE_ERROR_TELEFONO_INVALIDO)

    def clean_referente_apellido(self):
        return self.cleaned_data.get('referente_apellido', '').strip() or None

    def clean_referente_nombres(self):
        return self.cleaned_data.get('referente_nombres', '').strip() or None

    def clean_password(self):
        password = self.cleaned_data.get('password')
        if password:
            password_validation.validate_password(password)
        return password

    def clean_password_confirmacion(self):
        password = self.cleaned_data.get('password')
        password_confirmacion = self.cleaned_data.get('password_confirmacion')
        if password and password_confirmacion:
            if password != password_confirmacion:
                raise forms.ValidationError(
                    self.MENSAJE_ERROR_PASSWORD_NO_IGUALES)
        return password_confirmacion

    def clean_dni(self):
        dni = self.cleaned_data.get('dni')
        if Fiscal.objects.filter(dni=dni).exists():
            raise ValidationError(self.MENSAJE_ERROR_DNI_REPETIDO)
        return dni

    def clean_referido_por_codigo(self):
        referido_por_codigo = self.cleaned_data.get('referido_por_codigo',
                                                    None)
        if referido_por_codigo:
            if len(referido_por_codigo) != self.CARACTERES_REF_CODIGO:
                raise ValidationError(self.MENSAJE_ERROR_CODIGO_REF)
            referido_por_codigo = referido_por_codigo.upper()
        return referido_por_codigo
class DniForm(forms.Form):
    dni = ARDNIField(required=False)