source: sapic/users/views.py @ 830e9d2

Last change on this file since 830e9d2 was 72e62e0, checked in by ltroconis <ltroconis@…>, 6 años ago

Actualización de README.rst, actualización de requerimientos.txt, agregadas validaciones en registro de usuarios

  • Propiedad mode establecida a 100644
File size: 26.3 KB
Línea 
1# -*- coding: utf-8 -*-
2"""!
3Vista que controla los procesos de 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"""
10
11from django.shortcuts import render
12from django import forms
13from django.db.models import Q
14from django.conf import settings
15from django.contrib import messages
16from django.contrib.auth import (
17    authenticate, logout, login
18)
19
20from django.contrib.admin.models import LogEntry, ADDITION, CHANGE, DELETION
21from django.contrib.auth.models import (
22    Group, Permission, User
23)
24from django.contrib.auth.views import redirect_to_login
25from django.contrib.auth.mixins import (
26    LoginRequiredMixin
27)
28from django.contrib.contenttypes.models import ContentType
29from django.contrib.messages.views import SuccessMessageMixin
30from django.contrib.auth.views import PasswordChangeView
31from django.core.exceptions import PermissionDenied
32from django.core.urlresolvers import (
33    reverse_lazy, reverse
34)
35from django.core.validators import validate_email
36
37from django.shortcuts import (
38    render, redirect, get_object_or_404
39)
40from django.views.generic import (
41    TemplateView, ListView
42)
43from django.views.generic.base import RedirectView
44from django.views.generic.edit import (
45    FormView, UpdateView
46)
47from multi_form_view import MultiModelFormView
48
49from utils.views import LoginRequeridoPerAuth
50
51from .forms import *
52
53from organizaciones.models import VoceroComite
54
55from .models import (
56    UserProfile, UserProfileVocero
57    )
58
59
60class LoginView(FormView):
61    """!
62    Muestra el formulario de ingreso a la aplicación
63
64    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
65    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
66    @date 09-01-2017
67    @version 1.0.0
68    """
69    form_class = FormularioLogin
70    template_name = 'users.login.html'
71    success_url = '/inicio/'
72
73    def form_valid(self, form):
74        """
75        Valida el formulario de logeo
76        @return: Dirige a la pantalla inicial de la plataforma
77        """
78        usuario = form.cleaned_data['usuario']
79        contrasena = form.cleaned_data['contrasena']
80
81        try:
82            validate_email(usuario)
83            try:
84                usuario = User.objects.get(email=usuario).username
85                valid_email = True
86            except:
87                messages.error(self.request, 'No existe este correo: %s \
88                                              asociado a una cuenta' % (usuario))
89        except:
90            valid_email = False
91
92        usuario = authenticate(username=usuario, password=contrasena)
93        if usuario is not None:
94            login(self.request, usuario)
95            self.request.session['permisos'] = list(usuario.get_all_permissions())
96            try:
97                grupos = usuario.groups.all()
98                grupo = []
99                if len(grupos) > 1:
100                    for g in grupos:
101                        grupo += str(g),
102                else:
103                    grupo = str(usuario.groups.get())
104            except:
105                grupo = "No pertenece a un grupo"
106
107            self.request.session['grupos'] = grupo
108
109            if self.request.POST.get('remember_me') is not None:
110                # Session expira a los dos meses si no se deslogea
111                self.request.session.set_expiry(1209600)
112            messages.info(self.request, 'Bienvenido %s has ingresado a el \
113                                         SAPIC con el usuario %s \
114                                         ' % (usuario.first_name,
115                                              usuario.username))
116        else:
117            user = User.objects.filter(username=form.cleaned_data['usuario'])
118            if user:
119                user = user.get()
120                if not user.is_active:
121                    self.success_url = reverse_lazy('users:login')
122                    messages.error(self.request, 'La cuenta esta inactiva \
123                                                consulte con un adminitrador')
124                else:
125                    self.success_url = reverse_lazy('users:login')
126                    messages.warning(self.request, 'Verifique su nombre y contraseña\
127                                                 y vuelve a intertar')
128
129        return super(LoginView, self).form_valid(form)
130
131
132class PasswordChangeView(LoginRequeridoPerAuth, SuccessMessageMixin,
133                         PasswordChangeView):
134    """!
135    Cambiar la Contraseña
136
137    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
138    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
139    @date 20-07-2017
140    @version 1.0.0
141    """
142    template_name = 'users.change.pass.html'
143    form_class = PasswordChangeForm
144    success_url = '/inicio/'
145    success_message = "Cambio de contraseña con exito"
146    group_required = [u"Administradores", u"Voceros", u"Integrantes"]
147
148
149class LogOutView(RedirectView):
150    """!
151    Salir de la apliacion
152
153    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
154    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
155    @date 09-01-2017
156    @version 1.0.0
157    """
158    permanent = False
159    query_string = True
160
161    def get_redirect_url(self):
162        """!
163        Dirige a la pantalla del login
164        @return: A la url del login
165        """
166        logout(self.request)
167        return reverse_lazy('users:login')
168
169
170class OthersOptionsView(LoginRequeridoPerAuth, TemplateView):
171    """!
172    Clase que muestra el templates de las opciones del usuario
173
174    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
175    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
176    @date 30-005-2017
177    @version 1.0.0
178    """
179    template_name = "users.other.options.html"
180    group_required = [u"Administradores", u"Voceros", u"Integrantes"]
181
182
183class RegisterView(LoginRequeridoPerAuth, MultiModelFormView):
184    """!
185    Muestra el formulario de registro de usuarios
186
187    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
188    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
189    @date 09-01-2017
190    @version 1.0.0
191    """
192    template_name = "users.register.html"
193    form_classes = {
194      'user': FormularioAdminRegistro,
195      'user_perfil': FormularioAdminRegPerfil,
196    }
197    success_url = reverse_lazy('utils:inicio')
198    model = Group
199    model_permi = Permission
200    group_required = [u"Administradores"]
201    record_id=None
202
203    def get_context_data(self, **kwargs):
204        """
205        Carga el formulario en la vista,para registrar usuarios
206        @return: El contexto con los objectos para la vista
207        """
208        return super(RegisterView, self).get_context_data(**kwargs)
209
210    def forms_valid(self, forms, **kwargs):
211        """
212        Valida el formulario de registro del perfil de usuario
213        @return: Dirige con un mensaje de exito a el home
214        """
215        print ('hola')
216        nuevo_usuario = forms['user'].save()
217        nuevo_perfil = forms['user_perfil'].save(commit=False)
218        nuevo_perfil.fk_user = nuevo_usuario
219        nuevo_perfil.save()
220        usuario = forms['user'].cleaned_data['username']
221        grupos = forms['user'].cleaned_data['groups']
222        for group in grupos:
223            # Agrega a el usuario al(los) grupo(s) seleccionado(s)
224            nuevo_usuario.groups.add(group.pk)
225        model_user = ContentType.objects.get_for_model(User).pk
226        LogEntry.objects.log_action(
227            user_id=self.request.user.id,
228            content_type_id=model_user,
229            object_id=nuevo_usuario.id,
230            object_repr=str(nuevo_usuario.username),
231            action_flag=ADDITION)
232        messages.success(self.request, "Usuario %s creado con exito\
233                                       " % (str(usuario)))
234        return super(RegisterView, self).forms_valid(forms)
235
236    def forms_invalid(self, forms, **kwargs):
237        print (forms)
238        return super(RegisterView, self).forms_invalid(forms)
239
240class DataDetailView(LoginRequeridoPerAuth, ListView):
241    """!
242    Consultar los datos basicos del usuario
243    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
244    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
245    @date 21-07-2017
246    @version 1.0.0
247    """
248    template_name = 'users.data.detail.html'
249    model = UserProfileVocero
250    group_required = [u"Voceros"]
251
252    def dispatch(self, request, *args, **kwargs):
253        if int(request.user.pk) != int(self.kwargs.get('pk', None)):
254            return redirect('utils:403error')
255        return super(DataDetailView, self).dispatch(request, *args, **kwargs)
256
257    def get_context_data(self, **kwargs):
258        """
259        Carga el formulario en la vista,para registrar usuarios
260        @return: El contexto con los objectos para la vista
261        """
262        context = super(DataDetailView, self).get_context_data(**kwargs)
263        self.record_id = self.kwargs.get('pk', None)
264        try:
265            record = self.model.objects.select_related().get(fk_user=self.record_id)
266        except User.DoesNotExist:
267            record = None
268        if record.fk_vocero.fk_rol_unidad.pk == 1:
269            try:
270                comite = VoceroComite.objects.get(fk_vocero=record.fk_vocero)
271            except:
272                comite = {}
273                comite['fk_comite'] = "Este vocero no fue asignado a un comite"
274        else:
275            comite = None
276        context['upUser'] = record
277        context['comite'] = comite
278        return context
279
280
281class UpdatePerfilAdmin(LoginRequeridoPerAuth, MultiModelFormView):
282    """!
283    Actualizar el perfil del usuario
284
285    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
286    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
287    @date 31-01-2017
288    @version 1.0.0
289    """
290    model = UserProfile
291    form_classes = {
292      'user': FormularioUpdate,
293      'user_perfil': FormularioAdminRegPerfil,
294    }
295    template_name = 'users.update.perfil.html'
296    success_url = reverse_lazy('users:options')
297    group_required = [u"Administradores"]
298    record_id = None
299
300    def dispatch(self, request, *args, **kwargs):
301        if int(request.user.pk) != int(self.kwargs.get('pk', None)):
302            return redirect('utils:403error')
303        return super(UpdatePerfilAdmin, self).dispatch(request, *args, **kwargs)
304
305    def get_context_data(self, **kwargs):
306        """
307        Carga el formulario en la vista,para registrar usuarios
308        @return: El contexto con los objectos para la vista
309        """
310        context = super(UpdatePerfilAdmin, self).get_context_data(**kwargs)
311        self.record_id = self.kwargs.get('pk', None)
312        try:
313            record = self.model.objects.select_related().get(fk_user=self.record_id)
314        except User.DoesNotExist:
315            record = None
316        context['upUser'] = record
317        return context
318
319    def get_objects(self, **kwargs):
320        """
321        Carga el formulario en la vista,para actualizar el perfil del  usuario
322        @return: El contexto con los objectos para la vista
323        """
324        self.record_id = self.kwargs.get('pk', None)
325        try:
326            record = self.model.objects.select_related().get(fk_user=self.record_id)
327        except User.DoesNotExist:
328            record = None
329        return {
330          'user_perfil': record,
331          'user': record.fk_user if record else None}
332
333    def forms_valid(self, forms, **kwargs):
334        """
335        Valida el formulario de registro del perfil de usuario
336        @return: Dirige con un mensaje de exito a el home
337        """
338        self.record_id = self.kwargs.get('pk', None)
339        objeto = get_object_or_404(User, pk=self.record_id)
340        if self.record_id is not None:
341            messages.success(self.request, "Usuario %s Actualizado con exito\
342                                           " % (str(objeto.username)))
343        return super(UpdatePerfilAdmin, self).forms_valid(forms)
344
345
346class DataDetailAdminView(LoginRequeridoPerAuth, ListView):
347    """!
348    Consultar los datos basicos del usuario
349    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
350    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
351    @date 21-07-2017
352    @version 1.0.0
353    """
354    template_name = 'users.data.detail.html'
355    model = UserProfile
356    group_required = [u"Administradores"]
357
358    def dispatch(self, request, *args, **kwargs):
359        if int(request.user.pk) != int(self.kwargs.get('pk', None)):
360            return redirect('utils:403error')
361        return super(DataDetailAdminView, self).dispatch(request, *args, **kwargs)
362
363    def get_context_data(self, **kwargs):
364        """
365        Carga el formulario en la vista,para registrar usuarios
366        @return: El contexto con los objectos para la vista
367        """
368        context = super(DataDetailAdminView, self).get_context_data(**kwargs)
369        self.record_id = self.kwargs.get('pk', None)
370        try:
371            record = self.model.objects.select_related().get(fk_user=self.record_id)
372        except User.DoesNotExist:
373            record = None
374        context['upUser'] = record
375        return context
376
377    def forms_valid(self, forms, **kwargs):
378        """
379        Valida el formulario de registro del perfil de usuario
380        @return: Dirige con un mensaje de exito a el home
381        """
382        self.record_id = self.kwargs.get('pk', None)
383        objeto = get_object_or_404(User, pk=self.record_id)
384        if self.record_id is not None:
385            messages.success(self.request, "Usuario %s Actualizado con exito\
386                                           " % (str(objeto.username)))
387        return super(UpdatePerfilAdmin, self).forms_valid(forms)
388
389
390class ListUsersView(LoginRequeridoPerAuth, TemplateView):
391    """!
392    Listar usuarios de la plataforma
393
394    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
395    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
396    @date 30-05-2017
397    @version 1.0.0
398    """
399    template_name = "users.list.html"
400    model = User
401    success_url = reverse_lazy('users:lista_users')
402    group_required = [u"Administradores"]
403
404    def __init__(self):
405        super(ListUsersView, self).__init__()
406
407    def post(self, *args, **kwargs):
408        '''
409        Cambia el estado activo a el usuario
410        @return: Dirige a la tabla que muestra los usuarios de la apliacion
411        '''
412        accion = self.request.POST
413        activar = accion.get('activar', None)
414        inactivar = accion.get('inactivar', None)
415        estado = False
416
417        if activar is not None:
418            user = activar
419            estado = True
420        elif inactivar is not None:
421            user = inactivar
422            estado = False
423        else:
424            messages.error(self.request, "Esta intentando hacer \
425                                          una accion incorrecta")
426        try:
427            user_act = self.model.objects.get(pk=user)
428            user_act.is_active = estado
429            user_act.save()
430            if estado:
431                messages.success(self.request, "Se ha activado \
432                                                el usuario: %s\
433                                                " % (str(user_act)))
434            else:
435                messages.warning(self.request, "Se ha inactivado \
436                                                el usuario: %s\
437                                                " % (str(user_act)))
438        except:
439            messages.info(self.request, "El usuario no existe")
440        return redirect(self.success_url)
441
442
443class ModalsPerfil(LoginRequeridoPerAuth, MultiModelFormView):
444    """!
445    Construye el modals para la actualizacion del usuario
446
447    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
448    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
449    @date 31-01-2017
450    @version 1.0.0
451    """
452    model = UserProfile
453    form_classes = {
454      'user': FormularioAdminUpdate,
455      'user_perfil': FormularioAdminRegPerfil,
456    }
457    template_name = 'users.modals.perfil.html'
458    success_url = reverse_lazy('users:lista_users')
459    group_required = [u"Administradores"]
460    record_id = None
461
462    def get_context_data(self, **kwargs):
463        """
464        Carga el formulario en la vista, para registrar usuarios
465        @return: El contexto con los objectos para la vista
466        """
467        context = super(ModalsPerfil, self).get_context_data(**kwargs)
468        self.record_id = self.kwargs.get('pk', None)
469        if self.record_id is not None:
470            try:
471                usuario = User.objects.get(pk=self.record_id)
472            except User.DoesNotExist:
473                usuario = None
474            try:
475                record = self.model.objects.select_related().get(fk_user=self.record_id)
476            except self.model.DoesNotExist:
477                if usuario is not None:
478                    try:
479                        record = UserProfileVocero.objects.select_related().get(fk_user=self.record_id)
480                    except:
481                        record = None
482        context['upUser'] = record
483        return context
484
485    def get_objects(self, **kwargs):
486        """
487        Carga el formulario en la vista,para actualizar el perfil del  usuario
488        @return: El contexto con los objectos para la vista
489        """
490        self.record_id = self.kwargs.get('pk', None)
491        if self.record_id is not None:
492            try:
493                usuario = User.objects.get(pk=self.record_id)
494            except User.DoesNotExist:
495                usuario = None
496            try:
497                record = self.model.objects.select_related().get(fk_user=self.record_id)
498                vocero = None
499                self.form_classes['user_perfil'] = FormularioAdminRegPerfil
500            except self.model.DoesNotExist:
501                if usuario is not None:
502                    try:
503                        vocero = UserProfileVocero.objects.select_related().get(fk_user=self.record_id)
504                        self.form_classes['user_perfil'] = FormupdatePerfilVoceros
505                    except UserProfileVocero.DoesNotExist:
506                        vocero = None
507                record = None
508        return {
509          'user_perfil': vocero.fk_vocero if vocero else record,
510          'user': record.fk_user if record else vocero.fk_user }
511
512    def get_success_url(self):
513        return reverse('users:lista_users')
514
515    def forms_valid(self, forms, **kwargs):
516        """
517        Valida el formulario de registro del perfil de usuario
518        @return: Dirige con un mensaje de exito a el home
519        """
520        self.record_id = self.kwargs.get('pk', None)
521        if self.record_id is not None:
522            objeto = get_object_or_404(User, pk=self.record_id)
523            messages.success(self.request, "Usuario %s Actualizado con exito\
524                                           " % (str(objeto.username)))
525        return super(ModalsPerfil, self).forms_valid(forms)
526
527
528class UpdatePerfil(LoginRequeridoPerAuth, MultiModelFormView):
529    """!
530    Actualizar el perfil del usuario
531
532    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
533    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
534    @date 31-01-2017
535    @version 1.0.0
536    """
537    model = UserProfileVocero
538    form_classes = {
539      'user': FormularioUpdate,
540      'user_perfil': FormularioRegVoceros,
541    }
542    template_name = 'users.update.perfil.html'
543    success_url = reverse_lazy('users:options')
544    group_required = [u"Voceros"]
545    record_id = None
546
547    def dispatch(self, request, *args, **kwargs):
548        if int(request.user.pk) != int(self.kwargs.get('pk', None)):
549            return redirect('utils:403error')
550        return super(UpdatePerfil, self).dispatch(request, *args, **kwargs)
551
552    def get_context_data(self, **kwargs):
553        """
554        Carga el formulario en la vista, para registrar usuarios
555        @return: El contexto con los objectos para la vista
556        """
557        context = super(UpdatePerfil, self).get_context_data(**kwargs)
558        self.record_id = self.kwargs.get('pk', None)
559        try:
560            record = self.model.objects.select_related().get(fk_user=self.record_id)
561        except User.DoesNotExist:
562            record = None
563        context['upUser'] = record
564        return context
565
566    def get_objects(self, **kwargs):
567        """
568        Carga el formulario en la vista,para actualizar el perfil del  usuario
569        @return: El contexto con los objectos para la vista
570        """
571        self.record_id = self.kwargs.get('pk', None)
572        try:
573            record = self.model.objects.select_related().get(fk_user=self.record_id)
574        except User.DoesNotExist:
575            record = None
576        return {
577          'user_perfil': record.fk_vocero,
578          'user': record.fk_user if record else None}
579
580    def forms_valid(self, forms, **kwargs):
581        """
582        Valida el formulario de registro del perfil de usuario
583        @return: Dirige con un mensaje de exito a el home
584        """
585        self.record_id = self.kwargs.get('pk', None)
586        objeto = get_object_or_404(User, pk=self.record_id)
587        if self.record_id is not None:
588            messages.success(self.request, "Usuario %s Actualizado con exito\
589                                           " % (str(objeto.username)))
590        return super(UpdatePerfil, self).forms_valid(forms)
591
592
593class RegisterVocerosView(LoginRequeridoPerAuth, MultiModelFormView):
594    """!
595    Muestra el formulario de registro de usuarios voceros
596
597    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
598    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
599    @date 09-01-2017
600    @version 1.0.0
601    """
602    model = UserProfileVocero
603    form_classes = {
604      'user': FormularioAdminRegVoceros,
605      'user_vocero': FormularioRegVoceros,
606    }
607    template_name = 'users.register.vocero.html'
608    success_url = reverse_lazy('users:options')
609    group_required = [u"Administradores"]
610    record_id = None
611
612
613    def get_objects(self, **kwargs):
614        """
615        Carga el formulario en la vista,para actualizar el perfil del  usuario
616        @return: El contexto con los objectos para la vista
617        """
618        self.record_id = self.kwargs.get('pk', None)
619        try:
620            record = self.model.objects.select_related().get(fk_user=self.record_id)
621        except self.model.DoesNotExist:
622            record = None
623        return {
624          'user_vocero': record,
625          'user': record.fk_user if record else None}
626
627    def forms_valid(self, forms, **kwargs):
628        """
629        Valida el formulario del perfil de vocero y usuario
630        @return: Dirige con un mensaje de exito al registro de proyecto
631        """
632        # Campos para instanciar el vocero y actualizar sus campos
633        documento_identidad = forms['user_vocero'].cleaned_data['documento']
634        tipo_documento = forms['user_vocero'].cleaned_data['fk_tipo_documento']
635        organizacion_social = forms['user_vocero'].cleaned_data['organizacion']
636        comite = forms['user_vocero'].cleaned_data['comite_unidad_ejecutiva']
637
638        # Verifica si el vocero tiene registro sobre la organizacion social
639        try:
640            vocero = Vocero.objects.get(fk_org_social=organizacion_social,
641                                        fk_tipo_documento=tipo_documento,
642                                        documento_identidad=documento_identidad)
643            actualizar_vocero = self.form_classes['user_vocero'](
644                                self.request.POST,
645                                instance=vocero)
646            actualizar_vocero.save(commit=False)
647
648            # Crea el nuevo usuario a partir del formulario
649            nuevo_usuario = forms['user'].save()
650            # Agrega al grupo de voceros al nuevo usuario
651            nuevo_usuario.groups.add(Group.objects.get(pk=2))
652            # Actualiza los datos del vocero a parit de la instancia del formulario
653            vocero_actualizado = actualizar_vocero.save()
654            # Asocia el vocero con la nueva cuenta de usuario
655            asociar_voceros = self.model(fk_user=nuevo_usuario,
656                                         fk_vocero=vocero_actualizado)
657            # Si el usuario pertenece a un comite lo asocia
658            if comite is not None:
659                try:
660                    # Asocia el vocero con un comite de la unidad Ejecutiva
661                    comite_unidad = VoceroComite(fk_vocero=vocero_actualizado,
662                                                 fk_comite=comite)
663                    comite_unidad.save()
664                except:
665                    messages.warning(self.request, "Existe un problema al \
666                                                    relacionar el comite a \
667                                                    este vocero")
668            try:
669                # Crea la cuenta de usuario vocero
670                asociar_voceros.save()
671                nombre_vocero = str(vocero_actualizado.nombres) + " \
672                                " + str(vocero_actualizado.apellidos)
673                messages.success(self.request, "Se creo el usuario %s, para el \
674                                                vocero %s" % (
675                                                nuevo_usuario.username,
676                                                nombre_vocero))
677            except:
678                messages.error(self.request, "El voceros al que quieres asociar  \
679                                              a la cuenta ya existe o ya se \
680                                              encuentra asociado")
681                return redirect(self.success_url)
682
683        except:
684            messages.error(self.request, "Este Vocero %s, no se encuentra \
685                                          asociado a esta organizacion: %s" % (
686                                          documento_identidad,
687                                          organizacion_social.nombre))
688            return redirect(self.success_url)
689
690        return redirect(self.success_url)
691
692    def forms_invalid(self, forms, **kwargs):
693
694        return super(RegisterVocerosView, self).forms_invalid(forms)
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.