source: sapic/users/forms.py @ 008c9b4

Last change on this file since 008c9b4 was 008c9b4, checked in by William Páez <wpaez@…>, 6 años ago

fusionando plantilla users.menu.html

  • Propiedad mode establecida a 100644
File size: 24.3 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=True
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','data-toggle': 'toggle','data-on': 'Si',
175                                                   'data-off': 'No'})
176         self.fields['is_active'].label= 'Estará Activo?'
177         self.fields['is_active'].widget.attrs.update({'class': 'form-control','data-toggle': 'toggle','data-on': 'Si',
178                                                   'data-off': 'No'})
179         self.fields['groups'].widget.attrs.update({'class': 'form-control'})
180
181
182class FormularioAdminRegistro(UserCreationForm):
183    """!
184    Clase que permite crear el formulario para crear usuario por el administrador
185
186    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
187    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
188    @date 09-01-2017
189    @version 1.0.0
190    """
191
192    class Meta:
193        model = User
194        fields = ['username', 'password1', 'password2',
195                  'first_name', 'last_name', 'email',
196                  'groups', 'is_staff', 'is_active']
197
198    def __init__(self, *args, **kwargs):
199        super(FormularioAdminRegistro, self).__init__(*args, **kwargs)
200
201        self.fields['first_name'].widget.attrs.update({'class': 'form-control',
202                                                       'placeholder':
203                                                       'Nombres'})
204        self.fields['first_name'].required = True
205        self.fields['last_name'].widget.attrs.update({'class': 'form-control',
206                                                      'placeholder':
207                                                      'Apellidos'})
208        self.fields['last_name'].required = True
209        self.fields['username'].widget.attrs.update({'class': 'form-control',
210                                                     'placeholder':
211                                                     'Nombre de usuario \
212                                                     (Username)'})
213        self.fields['username'].required = True
214        self.fields['password1'].widget.attrs.update({'class': 'form-control',
215                                                      'placeholder':
216                                                      'Contraseña'})
217        self.fields['password1'].required = True
218        self.fields['password2'].widget.attrs.update({'class': 'form-control',
219                                                      'placeholder':
220                                                      'Repite la Contraseña'})
221        self.fields['password2'].required = True
222        self.fields['email'].widget.attrs.update({'class': 'form-control',
223                                                  'placeholder': 'Email'})
224        self.fields['email'].required = True
225        self.fields['is_staff'].label = 'Es Administrador?'
226        self.fields['is_staff'].widget.attrs.update({'class': 'form-control','data-toggle': 'toggle','data-on': 'Si',
227                                                   'data-off': 'No'})
228        self.fields['is_active'].label = 'Estará Activo?'
229        self.fields['is_active'].widget.attrs.update({'class': 'form-control','data-toggle': 'toggle','data-on': 'Si',
230                                                   'data-off': 'No',
231                                                   'checked': 'checked'})
232        self.fields['groups'].widget.attrs.update({'class': 'form-control'})
233
234    def clean(self):
235        cleaned_data = super(FormularioAdminRegistro, self).clean()
236        email = cleaned_data.get("email")
237
238        if email:
239            msg = "Error este email: %s, ya se encuentra asociado a una cuenta\
240                  " % (email)
241            try:
242                User.objects.get(email=email)
243                self.add_error('email', msg)
244            except:
245                pass
246
247    def clean_first_name(self):
248      first_name = self.cleaned_data['first_name']
249      if not first_name.isalpha():
250          raise forms.ValidationError('El nombre no puede contener números')
251      return first_name
252
253    def clean_last_name(self):
254      last_name = self.cleaned_data['last_name']
255      if not last_name.isalpha():
256          raise forms.ValidationError('El apellido no puede contener números')
257      return last_name
258
259
260class FormularioAdminRegPerfil(ModelForm):
261    """!
262    Clase que permite crear el formulario para actualizar usuario por el administrador
263
264    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
265    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
266    @date 09-01-2017
267    @version 1.0.0
268    """
269    tipo_organizacion = forms.ModelChoiceField(queryset=TipoOrganizacion.objects.all())
270
271    organizacion = forms.ModelChoiceField(queryset=OrganizacionSocial.objects.all())
272
273    class Meta:
274        model = UserProfile
275        fields = ['fk_tipo_documento', 'id_perfil']
276
277    def __init__(self, *args, **kwargs):
278        super(FormularioAdminRegPerfil, self).__init__(*args, **kwargs)
279        self.fields['fk_tipo_documento'].empty_label = 'Seleccione el Tipo de Documento'
280        self.fields['fk_tipo_documento'].widget.attrs.update({'class': 'form-control'})
281        self.fields['fk_tipo_documento'].label= 'Tipo de Documento'
282        self.fields['fk_tipo_documento'].required=True
283        self.fields['id_perfil'].widget.attrs.update({'class': 'form-control',
284                                                      'placeholder':'Documento de identidad'})
285        self.fields['id_perfil'].label= 'Documento de Identidad'
286        self.fields['id_perfil'].required=True
287
288        self.fields['tipo_organizacion'].widget.attrs.update({'class':'form-control'})
289        self.fields['tipo_organizacion'].empty_label = 'Seleccione Tipo Organización social'
290        self.fields['tipo_organizacion'].required = False
291
292        self.fields['organizacion'].widget.attrs.update({'class':'form-control'})
293        self.fields['organizacion'].empty_label = 'Seleccione la Organización social'
294        self.fields['organizacion'].label = 'Organizacion social'
295        self.fields['organizacion'].required = False
296
297    def clean(self):
298        cleaned_data = super(FormularioAdminRegPerfil, self).clean()
299        tipo_documento = cleaned_data.get("fk_tipo_documento")
300        documento_identidad = cleaned_data.get("id_perfil")
301        organizacion_social = cleaned_data.get("organizacion")
302
303        self.instance.id_perfil = documento_identidad
304        #self.instance.fk_org_social = organizacion_social
305        if not organizacion_social:
306          pass
307        elif documento_identidad is not None and tipo_documento is not None:
308
309            msg = "Error este Vocero %s, no se encuentra asociado a la \
310                   organizacion social: %s" % (documento_identidad,
311                                               organizacion_social)
312            try:
313                Vocero.objects.get(fk_org_social=organizacion_social,
314                                   fk_tipo_documento=tipo_documento,
315                                   documento_identidad=documento_identidad)
316            except:
317                self.add_error('id_perfil', msg)
318
319
320class PasswordChangeForm(PasswordChangeForm):
321    """!
322    Clase que sobrescribir el formulario para cambiar la contraseña
323
324    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
325    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
326    @date 09-01-2017
327    @version 1.0.0
328    """
329    def __init__(self, *args, **kwargs):
330        super(PasswordChangeForm, self).__init__(*args, **kwargs)
331
332        self.fields['old_password'].widget.attrs.update({'class': 'form-control',
333                                                  'placeholder': 'Contraseña Antigua'})
334        self.fields['new_password1'].widget.attrs.update({'class': 'form-control',
335                                                  'placeholder': 'Ingresa la nueva contraseña'})
336
337        self.fields['new_password2'].widget.attrs.update({'class': 'form-control',
338                                                  'placeholder': 'Repite la nueva contraseña'})
339
340
341
342class FormularioAdminRegVoceros(UserCreationForm):
343    """!
344     Clase que permite crear el formulario para crear usuarios voceros por el administrador
345
346    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
347    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
348    @date 04-08-2017
349    @version 1.0.0
350    """
351
352    class Meta:
353        model = User
354        fields = ['username', 'password1', 'password2',
355                  'first_name', 'last_name', 'email',
356                  'is_active']
357 
358
359    def __init__(self, *args, **kwargs):
360        super(FormularioAdminRegVoceros, self).__init__(*args, **kwargs)
361
362        self.fields['first_name'].widget.attrs.update({'class': 'form-control',
363                                                       'placeholder':
364                                                       'Nombres'})
365        self.fields['first_name'].required = True
366        self.fields['last_name'].widget.attrs.update({'class': 'form-control',
367                                                      'placeholder':
368                                                      'Apellidos'})
369        self.fields['last_name'].required = True
370        self.fields['username'].widget.attrs.update({'class': 'form-control',
371                                                     'placeholder':
372                                                     'Nombre de usuario \
373                                                     (Username)'})
374        self.fields['username'].required = True
375        self.fields['password1'].widget.attrs.update({'class': 'form-control',
376                                                      'placeholder':
377                                                      'Contraseña'})
378        self.fields['password1'].required = True
379        self.fields['password2'].widget.attrs.update({'class': 'form-control',
380                                                      'placeholder':
381                                                      'Repite la Contraseña'})
382        self.fields['password2'].required = True
383        self.fields['email'].widget.attrs.update({'class': 'form-control',
384                                                  'placeholder': 'Email'})
385
386        self.fields['is_active'].label = 'Estará Activo?'
387        self.fields['is_active'].widget.attrs.update({'class': 'form-control','data-toggle': 'toggle','data-on': 'Si',
388                                                   'data-off': 'No',
389                                                   'checked': 'checked'})
390
391    def clean(self):
392        cleaned_data = super(FormularioAdminRegVoceros, self).clean()
393        email = cleaned_data.get("email")
394
395        if email:
396            msg = "Error este email: %s, ya se encuentra asociado a otra cuenta\
397                  " % (email)
398            try:
399                User.objects.get(email=email)
400                self.add_error('email', msg)
401            except:
402                pass
403
404    def clean_first_name(self):
405      first_name = self.cleaned_data['first_name']
406      if not first_name.isalpha():
407          raise forms.ValidationError('El nombre no puede contener números')
408      return first_name
409
410    def clean_last_name(self):
411      last_name = self.cleaned_data['last_name']
412      if not last_name.isalpha():
413          raise forms.ValidationError('El apellido no puede contener números')
414      return last_name
415
416
417class FormularioRegVoceros(ModelForm):
418
419    tipo_organizacion = forms.ModelChoiceField(queryset=TipoOrganizacion.objects.all())
420
421    comite_unidad_ejecutiva = forms.ModelChoiceField(queryset=ComiteUnidadEjecutiva.objects.all())
422
423    estado = forms.ModelChoiceField(queryset=Estado.objects.all())
424
425    municipio = forms.ModelChoiceField(queryset=Municipio.objects.all())
426
427    documento = forms.IntegerField()
428
429    organizacion = forms.ModelChoiceField(queryset=OrganizacionSocial.objects.all())
430
431    class Meta:
432        model = Vocero
433        fields = ['organizacion', 'fk_tipo_documento', 'documento',
434                  'tipo_organizacion', 'fk_rol_unidad', 'sector',
435                  'casa_edificio_calle', 'comite_unidad_ejecutiva', 'localidad',
436                  'telefono', 'estado', 'municipio']
437
438    def __init__(self, *args, **kwargs):
439        super(FormularioRegVoceros, self).__init__(*args, **kwargs)
440
441        self.fields['fk_tipo_documento'].widget.attrs.update({'class':'form-control'})
442        self.fields['fk_tipo_documento'].empty_label = 'Seleccione El tipo de Documento'
443        self.fields['fk_tipo_documento'].label = 'Tipo de Documento'
444        self.fields['fk_tipo_documento'].required = True
445
446        self.fields['documento'].widget.attrs.update({'class':'form-control'})
447        self.fields['documento'].label = 'Documento de Identidad'
448        self.fields['documento'].required=True
449
450        self.fields['tipo_organizacion'].widget.attrs.update({'class':'form-control'})
451        self.fields['tipo_organizacion'].empty_label = 'Seleccione Tipo Organización social'
452        self.fields['tipo_organizacion'].required = True
453
454        self.fields['organizacion'].widget.attrs.update({'class':'form-control'})
455        self.fields['organizacion'].empty_label = 'Seleccione la Organización social'
456        self.fields['organizacion'].label = 'Organizacion social'
457        self.fields['organizacion'].required = True
458
459        self.fields['fk_rol_unidad'].widget.attrs.update({'class':'form-control'})
460        self.fields['fk_rol_unidad'].empty_label = 'Seleccione el Rol'
461        self.fields['fk_rol_unidad'].label = 'Rol del Vocero'
462        self.fields['fk_rol_unidad'].required = True
463
464        self.fields['comite_unidad_ejecutiva'].widget.attrs.update({'class':'form-control'})
465        self.fields['comite_unidad_ejecutiva'].empty_label = 'Seleccione el Comite'
466        self.fields['comite_unidad_ejecutiva'].required = False
467
468        self.fields['estado'].widget.attrs.update({'class':'form-control'})
469        self.fields['estado'].empty_label = 'Seleccione Estado'
470        self.fields['estado'].required = True
471
472        self.fields['municipio'].widget.attrs.update({'class':'form-control'})
473        self.fields['municipio'].empty_label = 'Seleccione Municipio'
474        self.fields['municipio'].required = True
475
476        self.fields['localidad'].widget.attrs.update({'class':'form-control'})
477        self.fields['localidad'].empty_label = 'Seleccione Parroquia'
478        self.fields['localidad'].required = True
479
480        self.fields['sector'].widget = forms.Textarea()
481        self.fields['sector'].widget.attrs.update(
482                                        {'class': 'form-control',
483                                         'placeholder':
484                                         'Sector del vocero'})
485        self.fields['sector'].required = False
486
487        self.fields['casa_edificio_calle'].widget = forms.Textarea()
488        self.fields['casa_edificio_calle'].widget.attrs.update(
489                                        {'class': 'form-control',
490                                         'placeholder':
491                                         'Casa/Edificio/Calle del vocero'})
492        self.fields['casa_edificio_calle'].required = False
493
494        self.fields['telefono'].widget.attrs.update({'class': 'form-control',
495                                                 'placeholder': 'Telefono'})
496        self.fields['telefono'].required = False
497
498    def clean(self):
499        cleaned_data = super(FormularioRegVoceros, self).clean()
500        tipo_documento = cleaned_data.get("fk_tipo_documento")
501        documento_identidad = cleaned_data.get("documento")
502        organizacion_social = cleaned_data.get("organizacion")
503
504        self.instance.documento_identidad = documento_identidad
505        self.instance.fk_org_social = organizacion_social
506
507        if documento_identidad is not None and tipo_documento is not None:
508
509            msg = "Error este Vocero %s, no se encuentra asociado a la \
510                   organizacion social: %s" % (documento_identidad,
511                                               organizacion_social)
512            try:
513                Vocero.objects.get(fk_org_social=organizacion_social,
514                                   fk_tipo_documento=tipo_documento,
515                                   documento_identidad=documento_identidad)
516            except:
517                self.add_error('documento_identidad', msg)
518
519
520class FormupdatePerfilVoceros(ModelForm):
521
522    tipo_organizacion = forms.ModelChoiceField(queryset=TipoOrganizacion.objects.all())
523
524    class Meta:
525        model = Vocero
526        fields = ['fk_org_social', 'fk_tipo_documento', 'documento_identidad',
527                  'tipo_organizacion', 'fk_rol_unidad', 'tipo_organizacion']
528
529    def __init__(self, *args, **kwargs):
530        super(FormupdatePerfilVoceros, self).__init__(*args, **kwargs)
531        self.fields['fk_tipo_documento'].widget.attrs.update({'class':'form-control',
532                                                              'readonly':'readonly'})
533        self.fields['fk_tipo_documento'].empty_label = 'Seleccione El tipo de Documento'
534        self.fields['fk_tipo_documento'].label = 'Tipo de Documento'
535        self.fields['fk_tipo_documento'].required = True
536
537        self.fields['documento_identidad'].widget.attrs.update({'class':'form-control',
538                                                      'readonly':'readonly'})
539        self.fields['documento_identidad'].label = 'Documento de Identidad'
540        self.fields['documento_identidad'].required=True
541
542        self.fields['tipo_organizacion'].widget.attrs.update({'class':'form-control'})
543        self.fields['tipo_organizacion'].empty_label = 'Seleccione Tipo Organización social'
544        self.fields['tipo_organizacion'].required = True
545
546        self.fields['fk_org_social'].widget.attrs.update({'class':'form-control'})
547        self.fields['fk_org_social'].empty_label = 'Seleccione la Organización social'
548        self.fields['fk_org_social'].label = 'Organizacion social'
549        self.fields['fk_org_social'].required = True
550
551        self.fields['fk_rol_unidad'].widget.attrs.update({'class':'form-control'})
552        self.fields['fk_rol_unidad'].empty_label = 'Seleccione el Rol'
553        self.fields['fk_rol_unidad'].label = 'Rol del Vocero'
554        self.fields['fk_rol_unidad'].required = True
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.