source: sapic/users/forms.py @ 897e8e0

Last change on this file since 897e8e0 was 897e8e0, checked in by Manuel Zambrano <mzambrano595@…>, 6 años ago

Solucionado problema de Apellidos en la tabla User

Se modifico el cleaned del registrar vocero form, el cual asignaba el firt_name al
campo last_name.

  • Propiedad mode establecida a 100644
File size: 24.1 KB
Línea 
1# -*- coding: utf-8 -*-
2"""!
3Formuario para generar los formulario para los usuarios
4
5@author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
6@copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
7@date 29-05-2017
8@version 1.0.0
9"""
10from captcha.fields import CaptchaField
11from django import forms
12from django.forms import ModelForm
13from django.contrib.auth.models import User
14from django.contrib.auth.forms import (
15    UserCreationForm, PasswordResetForm,
16    SetPasswordForm, PasswordChangeForm
17    )
18from django.forms.fields import (
19    CharField, BooleanField, IntegerField
20)
21from django.forms.widgets import (
22    PasswordInput, CheckboxInput
23)
24
25from .models import UserProfile
26
27from utils.views import (
28    obtenerEstados, listMunicipios, listParroquias,
29    obtenerTipoDocumento, obtenerUnidades, obtenerTipoOrganizacion
30    )
31
32from utils.models import (
33    Estado, Municipio, Parroquia,
34    TipoDocumento, UnidadesOrganizacionSocial, TipoOrganizacion,
35    ComiteUnidadEjecutiva
36    )
37
38from organizaciones.models import (
39  OrganizacionSocial, Vocero
40  )
41
42class FormularioLogin(forms.Form):
43    """!
44    Clase que permite crear el formulario de ingreso a la aplicación
45
46    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
47    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
48    @date 09-01-2017
49    @version 1.0.0
50    """
51    contrasena = CharField()
52    usuario = CharField()
53    remember_me = BooleanField()
54    captcha = CaptchaField()
55
56    class Meta:
57        fields = ('usuario', 'contrasena', 'remember_me' 'captcha')
58
59    def __init__(self, *args, **kwargs):
60        super(FormularioLogin, self).__init__(*args, **kwargs)
61        self.fields['contrasena'].widget = PasswordInput()
62        self.fields['contrasena'].widget.attrs.update({'class': 'form-control',
63        'placeholder': 'Contraseña'})
64        self.fields['usuario'].widget.attrs.update({'class': 'form-control',
65        'placeholder': 'Nombre de Usuario o Email'})
66        self.fields['remember_me'].label = "Recordar"
67        self.fields['remember_me'].widget = CheckboxInput()
68        self.fields['remember_me'].required = False
69        self.fields['captcha'].required=False
70
71
72class PasswordResetForm(PasswordResetForm):
73    """!
74    Clase que permite sobrescribir el formulario para resetear la contraseña
75
76    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
77    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
78    @date 09-01-2017
79    @version 1.0.0
80    """
81
82    def __init__(self, *args, **kwargs):
83        super(PasswordResetForm, self).__init__(*args, **kwargs)
84        self.fields['email'].widget.attrs.update({'class': 'form-control',
85                                                  'placeholder': 'Correo'})
86
87    def clean(self):
88        cleaned_data = super(PasswordResetForm, self).clean()
89        email = cleaned_data.get("email")
90
91        if email:
92            msg = "Error este email: %s, no se encuentra asociado a una cuenta\
93                  " % (email)
94            try:
95                User.objects.get(email=email)
96            except:
97                self.add_error('email', msg)
98
99
100class SetPasswordForm(SetPasswordForm):
101    """!
102    Clase que permite sobrescribir el formulario para ingresar la nueva contraseña
103
104    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
105    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
106    @date 09-01-2017
107    @version 1.0.0
108    """
109    def __init__(self, *args, **kwargs):
110        super(SetPasswordForm, self).__init__(*args, **kwargs)
111
112        self.fields['new_password1'].widget.attrs.update({'class': 'form-control',
113                                                  'placeholder': 'Ingresa la nueva contraseña'})
114
115        self.fields['new_password2'].widget.attrs.update({'class': 'form-control',
116                                                  'placeholder': 'Repite la nueva contraseña'})
117
118
119class FormularioUpdate(ModelForm):
120    """!
121    Clase que permite crear el formulario para actualizar el usuario
122
123    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
124    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
125    @date 09-01-2017
126    @version 1.0.0
127    """
128    class Meta:
129        model = User
130        fields = ['first_name', 'last_name', 'email']
131
132    def __init__(self, *args, **kwargs):
133        super(FormularioUpdate, self).__init__(*args, **kwargs)
134
135        self.fields['first_name'].widget.attrs.update({'class': 'form-control',
136        'placeholder': 'Nombres'})
137        self.fields['first_name'].required=True
138        self.fields['last_name'].widget.attrs.update({'class': 'form-control',
139        'placeholder': 'Apellidos'})
140        self.fields['last_name'].required=True
141        self.fields['email'].widget.attrs.update({'class': 'form-control',
142        'placeholder': 'Email'})
143        self.fields['email'].required=True
144
145
146class FormularioAdminUpdate(ModelForm):
147    """!
148    Clase que permite crear el formulario para actualizar el usuario por el administrador
149
150    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
151    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
152    @date 09-01-2017
153    @version 1.0.0
154    """
155
156    class Meta:
157        model = User
158        fields = ['first_name', 'last_name', 'email', 'groups',
159                  'is_staff', 'is_active']
160
161    def __init__(self, *args, **kwargs):
162         super(FormularioAdminUpdate, self).__init__(*args, **kwargs)
163
164         self.fields['first_name'].widget.attrs.update({'class': 'form-control',
165         'placeholder': 'Nombres'})
166         self.fields['first_name'].required=True
167         self.fields['last_name'].widget.attrs.update({'class': 'form-control',
168         'placeholder': 'Apellidos'})
169         self.fields['last_name'].required=True
170         self.fields['email'].widget.attrs.update({'class': 'form-control',
171         'placeholder': 'Email'})
172         self.fields['email'].required=True
173         self.fields['is_staff'].label= 'Es Administrador?'
174         self.fields['is_staff'].widget.attrs.update({'class': 'form-control'})
175         self.fields['is_active'].label= 'Estará Activo?'
176         self.fields['is_active'].widget.attrs.update({'class': 'form-control', 'checked': 'checked'})
177         self.fields['groups'].widget.attrs.update({'class': 'form-control'})
178
179
180class FormularioAdminRegistro(UserCreationForm):
181    """!
182    Clase que permite crear el formulario para crear usuario por el administrador
183
184    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
185    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
186    @date 09-01-2017
187    @version 1.0.0
188    """
189
190    class Meta:
191        model = User
192        fields = ['username', 'password1', 'password2',
193                  'first_name', 'last_name', 'email',
194                  'groups', 'is_staff', 'is_active']
195
196    def __init__(self, *args, **kwargs):
197        super(FormularioAdminRegistro, self).__init__(*args, **kwargs)
198
199        self.fields['first_name'].widget.attrs.update({'class': 'form-control',
200                                                       'placeholder':
201                                                       'Nombres'})
202        self.fields['first_name'].required = True
203        self.fields['last_name'].widget.attrs.update({'class': 'form-control',
204                                                      'placeholder':
205                                                      'Apellidos'})
206        self.fields['last_name'].required = True
207        self.fields['username'].widget.attrs.update({'class': 'form-control',
208                                                     'placeholder':
209                                                     'Nombre de usuario \
210                                                     (Username)'})
211        self.fields['username'].required = True
212        self.fields['password1'].widget.attrs.update({'class': 'form-control',
213                                                      'placeholder':
214                                                      'Contraseña'})
215        self.fields['password1'].required = True
216        self.fields['password2'].widget.attrs.update({'class': 'form-control',
217                                                      'placeholder':
218                                                      'Repite la Contraseña'})
219        self.fields['password2'].required = True
220        self.fields['email'].widget.attrs.update({'class': 'form-control',
221                                                  'placeholder': 'Email'})
222        self.fields['email'].required = True
223        self.fields['is_staff'].label = 'Es Administrador?'
224        self.fields['is_staff'].widget.attrs.update({'class': 'form-control','data-toggle': 'toggle','data-on': 'Si',
225                                                   'data-off': 'No'})
226        self.fields['is_active'].label = 'Estará Activo?'
227        self.fields['is_active'].widget.attrs.update({'class': 'form-control','data-toggle': 'toggle','data-on': 'Si',
228                                                   'data-off': 'No',
229                                                   'checked': 'checked'})
230        self.fields['groups'].widget.attrs.update({'class': 'form-control'})
231
232    def clean(self):
233        cleaned_data = super(FormularioAdminRegistro, self).clean()
234        email = cleaned_data.get("email")
235
236        if email:
237            msg = "Error este email: %s, ya se encuentra asociado a una cuenta\
238                  " % (email)
239            try:
240                User.objects.get(email=email)
241                self.add_error('email', msg)
242            except:
243                pass
244
245    def clean_first_name(self):
246      first_name = self.cleaned_data['first_name']
247      if not first_name.isalpha():
248          raise forms.ValidationError('El nombre no puede contener números')
249      return first_name
250
251    def clean_last_name(self):
252      last_name = self.cleaned_data['last_name']
253      if not last_name.isalpha():
254          raise forms.ValidationError('El apellido no puede contener números')
255      return last_name
256
257
258class FormularioAdminRegPerfil(ModelForm):
259    """!
260    Clase que permite crear el formulario para actualizar usuario por el administrador
261
262    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
263    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
264    @date 09-01-2017
265    @version 1.0.0
266    """
267    tipo_organizacion = forms.ModelChoiceField(queryset=TipoOrganizacion.objects.all())
268
269    organizacion = forms.ModelChoiceField(queryset=OrganizacionSocial.objects.all())
270
271    class Meta:
272        model = UserProfile
273        fields = ['fk_tipo_documento', 'id_perfil']
274
275    def __init__(self, *args, **kwargs):
276        super(FormularioAdminRegPerfil, self).__init__(*args, **kwargs)
277        self.fields['fk_tipo_documento'].empty_label = 'Seleccione el Tipo de Documento'
278        self.fields['fk_tipo_documento'].widget.attrs.update({'class': 'form-control'})
279        self.fields['fk_tipo_documento'].label= 'Tipo de Documento'
280        self.fields['fk_tipo_documento'].required=True
281        self.fields['id_perfil'].widget.attrs.update({'class': 'form-control',
282                                                      'placeholder':'Documento de identidad'})
283        self.fields['id_perfil'].label= 'Documento de Identidad'
284        self.fields['id_perfil'].required=True
285
286        self.fields['tipo_organizacion'].widget.attrs.update({'class':'form-control'})
287        self.fields['tipo_organizacion'].empty_label = 'Seleccione Tipo Organización social'
288        self.fields['tipo_organizacion'].required = False
289
290        self.fields['organizacion'].widget.attrs.update({'class':'form-control'})
291        self.fields['organizacion'].empty_label = 'Seleccione la Organización social'
292        self.fields['organizacion'].label = 'Organizacion social'
293        self.fields['organizacion'].required = False
294
295    def clean(self):
296        cleaned_data = super(FormularioAdminRegPerfil, self).clean()
297        tipo_documento = cleaned_data.get("fk_tipo_documento")
298        documento_identidad = cleaned_data.get("id_perfil")
299        organizacion_social = cleaned_data.get("organizacion")
300
301        self.instance.id_perfil = documento_identidad
302        #self.instance.fk_org_social = organizacion_social
303        if not organizacion_social:
304          pass
305        elif documento_identidad is not None and tipo_documento is not None:
306
307            msg = "Error este Vocero %s, no se encuentra asociado a la \
308                   organizacion social: %s" % (documento_identidad,
309                                               organizacion_social)
310            try:
311                Vocero.objects.get(fk_org_social=organizacion_social,
312                                   fk_tipo_documento=tipo_documento,
313                                   documento_identidad=documento_identidad)
314            except:
315                self.add_error('id_perfil', msg)
316
317
318class PasswordChangeForm(PasswordChangeForm):
319    """!
320    Clase que sobrescribir el formulario para cambiar la contraseña
321
322    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
323    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
324    @date 09-01-2017
325    @version 1.0.0
326    """
327    def __init__(self, *args, **kwargs):
328        super(PasswordChangeForm, self).__init__(*args, **kwargs)
329
330        self.fields['old_password'].widget.attrs.update({'class': 'form-control',
331                                                  'placeholder': 'Contraseña Antigua'})
332        self.fields['new_password1'].widget.attrs.update({'class': 'form-control',
333                                                  'placeholder': 'Ingresa la nueva contraseña'})
334
335        self.fields['new_password2'].widget.attrs.update({'class': 'form-control',
336                                                  'placeholder': 'Repite la nueva contraseña'})
337
338
339
340class FormularioAdminRegVoceros(UserCreationForm):
341    """!
342     Clase que permite crear el formulario para crear usuarios voceros por el administrador
343
344    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
345    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
346    @date 04-08-2017
347    @version 1.0.0
348    """
349
350    class Meta:
351        model = User
352        fields = ['username', 'password1', 'password2',
353                  'first_name', 'last_name', 'email',
354                  'is_active']
355 
356
357    def __init__(self, *args, **kwargs):
358        super(FormularioAdminRegVoceros, self).__init__(*args, **kwargs)
359
360        self.fields['first_name'].widget.attrs.update({'class': 'form-control',
361                                                       'placeholder':
362                                                       'Nombres'})
363        self.fields['first_name'].required = True
364        self.fields['last_name'].widget.attrs.update({'class': 'form-control',
365                                                      'placeholder':
366                                                      'Apellidos'})
367        self.fields['last_name'].required = True
368        self.fields['username'].widget.attrs.update({'class': 'form-control',
369                                                     'placeholder':
370                                                     'Nombre de usuario \
371                                                     (Username)'})
372        self.fields['username'].required = True
373        self.fields['password1'].widget.attrs.update({'class': 'form-control',
374                                                      'placeholder':
375                                                      'Contraseña'})
376        self.fields['password1'].required = True
377        self.fields['password2'].widget.attrs.update({'class': 'form-control',
378                                                      'placeholder':
379                                                      'Repite la Contraseña'})
380        self.fields['password2'].required = True
381        self.fields['email'].widget.attrs.update({'class': 'form-control',
382                                                  'placeholder': 'Email'})
383
384        self.fields['is_active'].label = 'Estará Activo?'
385        self.fields['is_active'].widget.attrs.update({'class': 'form-control','data-toggle': 'toggle','data-on': 'Si',
386                                                   'data-off': 'No',
387                                                   'checked': 'checked'})
388
389    def clean(self):
390        cleaned_data = super(FormularioAdminRegVoceros, self).clean()
391        email = cleaned_data.get("email")
392
393        if email:
394            msg = "Error este email: %s, ya se encuentra asociado a otra cuenta\
395                  " % (email)
396            try:
397                User.objects.get(email=email)
398                self.add_error('email', msg)
399            except:
400                pass
401
402    def clean_first_name(self):
403      first_name = self.cleaned_data['first_name']
404      if not first_name.isalpha():
405          raise forms.ValidationError('El nombre no puede contener números')
406      return first_name
407
408    def clean_last_name(self):
409      last_name = self.cleaned_data['last_name']
410      if not last_name.isalpha():
411          raise forms.ValidationError('El apellido no puede contener números')
412      return last_name
413
414
415class FormularioRegVoceros(ModelForm):
416
417    tipo_organizacion = forms.ModelChoiceField(queryset=TipoOrganizacion.objects.all())
418
419    comite_unidad_ejecutiva = forms.ModelChoiceField(queryset=ComiteUnidadEjecutiva.objects.all())
420
421    estado = forms.ModelChoiceField(queryset=Estado.objects.all())
422
423    municipio = forms.ModelChoiceField(queryset=Municipio.objects.all())
424
425    documento = forms.IntegerField()
426
427    organizacion = forms.ModelChoiceField(queryset=OrganizacionSocial.objects.all())
428
429    class Meta:
430        model = Vocero
431        fields = ['organizacion', 'fk_tipo_documento', 'documento',
432                  'tipo_organizacion', 'fk_rol_unidad', 'sector',
433                  'casa_edificio_calle', 'comite_unidad_ejecutiva', 'localidad',
434                  'telefono', 'estado', 'municipio']
435
436    def __init__(self, *args, **kwargs):
437        super(FormularioRegVoceros, self).__init__(*args, **kwargs)
438
439        self.fields['fk_tipo_documento'].widget.attrs.update({'class':'form-control'})
440        self.fields['fk_tipo_documento'].empty_label = 'Seleccione El tipo de Documento'
441        self.fields['fk_tipo_documento'].label = 'Tipo de Documento'
442        self.fields['fk_tipo_documento'].required = True
443
444        self.fields['documento'].widget.attrs.update({'class':'form-control'})
445        self.fields['documento'].label = 'Documento de Identidad'
446        self.fields['documento'].required=True
447
448        self.fields['tipo_organizacion'].widget.attrs.update({'class':'form-control'})
449        self.fields['tipo_organizacion'].empty_label = 'Seleccione Tipo Organización social'
450        self.fields['tipo_organizacion'].required = True
451
452        self.fields['organizacion'].widget.attrs.update({'class':'form-control'})
453        self.fields['organizacion'].empty_label = 'Seleccione la Organización social'
454        self.fields['organizacion'].label = 'Organizacion social'
455        self.fields['organizacion'].required = True
456
457        self.fields['fk_rol_unidad'].widget.attrs.update({'class':'form-control'})
458        self.fields['fk_rol_unidad'].empty_label = 'Seleccione el Rol'
459        self.fields['fk_rol_unidad'].label = 'Rol del Vocero'
460        self.fields['fk_rol_unidad'].required = True
461
462        self.fields['comite_unidad_ejecutiva'].widget.attrs.update({'class':'form-control'})
463        self.fields['comite_unidad_ejecutiva'].empty_label = 'Seleccione el Comite'
464        self.fields['comite_unidad_ejecutiva'].required = False
465
466        self.fields['estado'].widget.attrs.update({'class':'form-control'})
467        self.fields['estado'].empty_label = 'Seleccione Estado'
468        self.fields['estado'].required = True
469
470        self.fields['municipio'].widget.attrs.update({'class':'form-control'})
471        self.fields['municipio'].empty_label = 'Seleccione Municipio'
472        self.fields['municipio'].required = True
473
474        self.fields['localidad'].widget.attrs.update({'class':'form-control'})
475        self.fields['localidad'].empty_label = 'Seleccione Parroquia'
476        self.fields['localidad'].required = True
477
478        self.fields['sector'].widget = forms.Textarea()
479        self.fields['sector'].widget.attrs.update(
480                                        {'class': 'form-control',
481                                         'placeholder':
482                                         'Sector del vocero'})
483        self.fields['sector'].required = False
484
485        self.fields['casa_edificio_calle'].widget = forms.Textarea()
486        self.fields['casa_edificio_calle'].widget.attrs.update(
487                                        {'class': 'form-control',
488                                         'placeholder':
489                                         'Casa/Edificio/Calle del vocero'})
490        self.fields['casa_edificio_calle'].required = False
491
492        self.fields['telefono'].widget.attrs.update({'class': 'form-control',
493                                                 'placeholder': 'Telefono'})
494        self.fields['telefono'].required = False
495
496    def clean(self):
497        cleaned_data = super(FormularioRegVoceros, self).clean()
498        tipo_documento = cleaned_data.get("fk_tipo_documento")
499        documento_identidad = cleaned_data.get("documento")
500        organizacion_social = cleaned_data.get("organizacion")
501
502        self.instance.documento_identidad = documento_identidad
503        self.instance.fk_org_social = organizacion_social
504
505        if documento_identidad is not None and tipo_documento is not None:
506
507            msg = "Error este Vocero %s, no se encuentra asociado a la \
508                   organizacion social: %s" % (documento_identidad,
509                                               organizacion_social)
510            try:
511                Vocero.objects.get(fk_org_social=organizacion_social,
512                                   fk_tipo_documento=tipo_documento,
513                                   documento_identidad=documento_identidad)
514            except:
515                self.add_error('documento_identidad', msg)
516
517
518class FormupdatePerfilVoceros(ModelForm):
519
520    tipo_organizacion = forms.ModelChoiceField(queryset=TipoOrganizacion.objects.all())
521
522    class Meta:
523        model = Vocero
524        fields = ['fk_org_social', 'fk_tipo_documento', 'documento_identidad',
525                  'tipo_organizacion', 'fk_rol_unidad', 'tipo_organizacion']
526
527    def __init__(self, *args, **kwargs):
528        super(FormupdatePerfilVoceros, self).__init__(*args, **kwargs)
529        self.fields['fk_tipo_documento'].widget.attrs.update({'class':'form-control',
530                                                              'readonly':'readonly'})
531        self.fields['fk_tipo_documento'].empty_label = 'Seleccione El tipo de Documento'
532        self.fields['fk_tipo_documento'].label = 'Tipo de Documento'
533        self.fields['fk_tipo_documento'].required = True
534
535        self.fields['documento_identidad'].widget.attrs.update({'class':'form-control',
536                                                      'readonly':'readonly'})
537        self.fields['documento_identidad'].label = 'Documento de Identidad'
538        self.fields['documento_identidad'].required=True
539
540        self.fields['tipo_organizacion'].widget.attrs.update({'class':'form-control'})
541        self.fields['tipo_organizacion'].empty_label = 'Seleccione Tipo Organización social'
542        self.fields['tipo_organizacion'].required = True
543
544        self.fields['fk_org_social'].widget.attrs.update({'class':'form-control'})
545        self.fields['fk_org_social'].empty_label = 'Seleccione la Organización social'
546        self.fields['fk_org_social'].label = 'Organizacion social'
547        self.fields['fk_org_social'].required = True
548
549        self.fields['fk_rol_unidad'].widget.attrs.update({'class':'form-control'})
550        self.fields['fk_rol_unidad'].empty_label = 'Seleccione el Rol'
551        self.fields['fk_rol_unidad'].label = 'Rol del Vocero'
552        self.fields['fk_rol_unidad'].required = True
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.