source: sapic/users/views.py @ c609db6

erwinexplicacion_situacionaltaller_django
Last change on this file since c609db6 was c609db6, checked in by lhernandez <lhernandez@…>, 7 años ago

Implementando desarrollo de consultas publicas a las encuesta de la explicacion situacional de una organizacion social, se implemento para la encuesta de Condición De Suelos, Vientos, Aguas, Viviendas Y Servicios Públicos De Mi Comunidad

  • Propiedad mode establecida a 100644
File size: 26.1 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        nuevo_usuario = forms['user'].save()
216        nuevo_perfil = forms['user_perfil'].save(commit=False)
217        nuevo_perfil.fk_user = nuevo_usuario
218        nuevo_perfil.save()
219        usuario = forms['user'].cleaned_data['username']
220        grupos = forms['user'].cleaned_data['groups']
221        for group in grupos:
222            # Agrega a el usuario al(los) grupo(s) seleccionado(s)
223            nuevo_usuario.groups.add(group.pk)
224        model_user = ContentType.objects.get_for_model(User).pk
225        LogEntry.objects.log_action(
226            user_id=self.request.user.id,
227            content_type_id=model_user,
228            object_id=nuevo_usuario.id,
229            object_repr=str(nuevo_usuario.username),
230            action_flag=ADDITION)
231        messages.success(self.request, "Usuario %s creado con exito\
232                                       " % (str(usuario)))
233        return super(RegisterView, self).forms_valid(forms)
234
235
236class DataDetailView(LoginRequeridoPerAuth, ListView):
237    """!
238    Consultar los datos basicos del usuario
239    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
240    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
241    @date 21-07-2017
242    @version 1.0.0
243    """
244    template_name = 'users.data.detail.html'
245    model = UserProfileVocero
246    group_required = [u"Voceros"]
247
248    def dispatch(self, request, *args, **kwargs):
249        if int(request.user.pk) != int(self.kwargs.get('pk', None)):
250            return redirect('utils:403error')
251        return super(DataDetailView, self).dispatch(request, *args, **kwargs)
252
253    def get_context_data(self, **kwargs):
254        """
255        Carga el formulario en la vista,para registrar usuarios
256        @return: El contexto con los objectos para la vista
257        """
258        context = super(DataDetailView, self).get_context_data(**kwargs)
259        self.record_id = self.kwargs.get('pk', None)
260        try:
261            record = self.model.objects.select_related().get(fk_user=self.record_id)
262        except User.DoesNotExist:
263            record = None
264        if record.fk_vocero.fk_rol_unidad.pk == 1:
265            try:
266                comite = VoceroComite.objects.get(fk_vocero=record.fk_vocero)
267            except:
268                comite = {}
269                comite['fk_comite'] = "Este vocero no fue asignado a un comite"
270        else:
271            comite = None
272        context['upUser'] = record
273        context['comite'] = comite
274        return context
275
276
277class UpdatePerfilAdmin(LoginRequeridoPerAuth, MultiModelFormView):
278    """!
279    Actualizar el perfil del usuario
280
281    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
282    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
283    @date 31-01-2017
284    @version 1.0.0
285    """
286    model = UserProfile
287    form_classes = {
288      'user': FormularioUpdate,
289      'user_perfil': FormularioAdminRegPerfil,
290    }
291    template_name = 'users.update.perfil.html'
292    success_url = reverse_lazy('users:options')
293    group_required = [u"Administradores"]
294    record_id = None
295
296    def dispatch(self, request, *args, **kwargs):
297        if int(request.user.pk) != int(self.kwargs.get('pk', None)):
298            return redirect('utils:403error')
299        return super(UpdatePerfilAdmin, self).dispatch(request, *args, **kwargs)
300
301    def get_context_data(self, **kwargs):
302        """
303        Carga el formulario en la vista,para registrar usuarios
304        @return: El contexto con los objectos para la vista
305        """
306        context = super(UpdatePerfilAdmin, self).get_context_data(**kwargs)
307        self.record_id = self.kwargs.get('pk', None)
308        try:
309            record = self.model.objects.select_related().get(fk_user=self.record_id)
310        except User.DoesNotExist:
311            record = None
312        context['upUser'] = record
313        return context
314
315    def get_objects(self, **kwargs):
316        """
317        Carga el formulario en la vista,para actualizar el perfil del  usuario
318        @return: El contexto con los objectos para la vista
319        """
320        self.record_id = self.kwargs.get('pk', None)
321        try:
322            record = self.model.objects.select_related().get(fk_user=self.record_id)
323        except User.DoesNotExist:
324            record = None
325        return {
326          'user_perfil': record,
327          'user': record.fk_user if record else None}
328
329    def forms_valid(self, forms, **kwargs):
330        """
331        Valida el formulario de registro del perfil de usuario
332        @return: Dirige con un mensaje de exito a el home
333        """
334        self.record_id = self.kwargs.get('pk', None)
335        objeto = get_object_or_404(User, pk=self.record_id)
336        if self.record_id is not None:
337            messages.success(self.request, "Usuario %s Actualizado con exito\
338                                           " % (str(objeto.username)))
339        return super(UpdatePerfilAdmin, self).forms_valid(forms)
340
341
342class DataDetailAdminView(LoginRequeridoPerAuth, ListView):
343    """!
344    Consultar los datos basicos del usuario
345    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
346    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
347    @date 21-07-2017
348    @version 1.0.0
349    """
350    template_name = 'users.data.detail.html'
351    model = UserProfile
352    group_required = [u"Administradores"]
353
354    def dispatch(self, request, *args, **kwargs):
355        if int(request.user.pk) != int(self.kwargs.get('pk', None)):
356            return redirect('utils:403error')
357        return super(DataDetailAdminView, self).dispatch(request, *args, **kwargs)
358
359    def get_context_data(self, **kwargs):
360        """
361        Carga el formulario en la vista,para registrar usuarios
362        @return: El contexto con los objectos para la vista
363        """
364        context = super(DataDetailAdminView, self).get_context_data(**kwargs)
365        self.record_id = self.kwargs.get('pk', None)
366        try:
367            record = self.model.objects.select_related().get(fk_user=self.record_id)
368        except User.DoesNotExist:
369            record = None
370        context['upUser'] = record
371        return context
372
373    def forms_valid(self, forms, **kwargs):
374        """
375        Valida el formulario de registro del perfil de usuario
376        @return: Dirige con un mensaje de exito a el home
377        """
378        self.record_id = self.kwargs.get('pk', None)
379        objeto = get_object_or_404(User, pk=self.record_id)
380        if self.record_id is not None:
381            messages.success(self.request, "Usuario %s Actualizado con exito\
382                                           " % (str(objeto.username)))
383        return super(UpdatePerfilAdmin, self).forms_valid(forms)
384
385
386class ListUsersView(LoginRequeridoPerAuth, TemplateView):
387    """!
388    Listar usuarios de la plataforma
389
390    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
391    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
392    @date 30-05-2017
393    @version 1.0.0
394    """
395    template_name = "users.list.html"
396    model = User
397    success_url = reverse_lazy('users:lista_users')
398    group_required = [u"Administradores"]
399
400    def __init__(self):
401        super(ListUsersView, self).__init__()
402
403    def post(self, *args, **kwargs):
404        '''
405        Cambia el estado activo a el usuario
406        @return: Dirige a la tabla que muestra los usuarios de la apliacion
407        '''
408        accion = self.request.POST
409        activar = accion.get('activar', None)
410        inactivar = accion.get('inactivar', None)
411        estado = False
412
413        if activar is not None:
414            user = activar
415            estado = True
416        elif inactivar is not None:
417            user = inactivar
418            estado = False
419        else:
420            messages.error(self.request, "Esta intentando hacer \
421                                          una accion incorrecta")
422        try:
423            user_act = self.model.objects.get(pk=user)
424            user_act.is_active = estado
425            user_act.save()
426            if estado:
427                messages.success(self.request, "Se ha activado \
428                                                el usuario: %s\
429                                                " % (str(user_act)))
430            else:
431                messages.warning(self.request, "Se ha inactivado \
432                                                el usuario: %s\
433                                                " % (str(user_act)))
434        except:
435            messages.info(self.request, "El usuario no existe")
436        return redirect(self.success_url)
437
438
439class ModalsPerfil(LoginRequeridoPerAuth, MultiModelFormView):
440    """!
441    Construye el modals para la actualizacion del usuario
442
443    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
444    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
445    @date 31-01-2017
446    @version 1.0.0
447    """
448    model = UserProfile
449    form_classes = {
450      'user': FormularioAdminUpdate,
451      'user_perfil': FormularioAdminRegPerfil,
452    }
453    template_name = 'users.modals.perfil.html'
454    success_url = reverse_lazy('users:lista_users')
455    group_required = [u"Administradores"]
456    record_id = None
457
458    def get_context_data(self, **kwargs):
459        """
460        Carga el formulario en la vista, para registrar usuarios
461        @return: El contexto con los objectos para la vista
462        """
463        context = super(ModalsPerfil, self).get_context_data(**kwargs)
464        self.record_id = self.kwargs.get('pk', None)
465        if self.record_id is not None:
466            try:
467                usuario = User.objects.get(pk=self.record_id)
468            except User.DoesNotExist:
469                usuario = None
470            try:
471                record = self.model.objects.select_related().get(fk_user=self.record_id)
472            except self.model.DoesNotExist:
473                if usuario is not None:
474                    try:
475                        record = UserProfileVocero.objects.select_related().get(fk_user=self.record_id)
476                    except:
477                        record = None
478        context['upUser'] = record
479        return context
480
481    def get_objects(self, **kwargs):
482        """
483        Carga el formulario en la vista,para actualizar el perfil del  usuario
484        @return: El contexto con los objectos para la vista
485        """
486        self.record_id = self.kwargs.get('pk', None)
487        if self.record_id is not None:
488            try:
489                usuario = User.objects.get(pk=self.record_id)
490            except User.DoesNotExist:
491                usuario = None
492            try:
493                record = self.model.objects.select_related().get(fk_user=self.record_id)
494                vocero = None
495                self.form_classes['user_perfil'] = FormularioAdminRegPerfil
496            except self.model.DoesNotExist:
497                if usuario is not None:
498                    try:
499                        vocero = UserProfileVocero.objects.select_related().get(fk_user=self.record_id)
500                        self.form_classes['user_perfil'] = FormupdatePerfilVoceros
501                    except UserProfileVocero.DoesNotExist:
502                        vocero = None
503                record = None
504        return {
505          'user_perfil': vocero.fk_vocero if vocero else record,
506          'user': record.fk_user if record else vocero.fk_user }
507
508    def get_success_url(self):
509        return reverse('users:lista_users')
510
511    def forms_valid(self, forms, **kwargs):
512        """
513        Valida el formulario de registro del perfil de usuario
514        @return: Dirige con un mensaje de exito a el home
515        """
516        self.record_id = self.kwargs.get('pk', None)
517        if self.record_id is not None:
518            objeto = get_object_or_404(User, pk=self.record_id)
519            messages.success(self.request, "Usuario %s Actualizado con exito\
520                                           " % (str(objeto.username)))
521        return super(ModalsPerfil, self).forms_valid(forms)
522
523
524class UpdatePerfil(LoginRequeridoPerAuth, MultiModelFormView):
525    """!
526    Actualizar el perfil del usuario
527
528    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
529    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
530    @date 31-01-2017
531    @version 1.0.0
532    """
533    model = UserProfileVocero
534    form_classes = {
535      'user': FormularioUpdate,
536      'user_perfil': FormularioRegVoceros,
537    }
538    template_name = 'users.update.perfil.html'
539    success_url = reverse_lazy('users:options')
540    group_required = [u"Voceros"]
541    record_id = None
542
543    def dispatch(self, request, *args, **kwargs):
544        if int(request.user.pk) != int(self.kwargs.get('pk', None)):
545            return redirect('utils:403error')
546        return super(UpdatePerfil, self).dispatch(request, *args, **kwargs)
547
548    def get_context_data(self, **kwargs):
549        """
550        Carga el formulario en la vista, para registrar usuarios
551        @return: El contexto con los objectos para la vista
552        """
553        context = super(UpdatePerfil, self).get_context_data(**kwargs)
554        self.record_id = self.kwargs.get('pk', None)
555        try:
556            record = self.model.objects.select_related().get(fk_user=self.record_id)
557        except User.DoesNotExist:
558            record = None
559        context['upUser'] = record
560        return context
561
562    def get_objects(self, **kwargs):
563        """
564        Carga el formulario en la vista,para actualizar el perfil del  usuario
565        @return: El contexto con los objectos para la vista
566        """
567        self.record_id = self.kwargs.get('pk', None)
568        try:
569            record = self.model.objects.select_related().get(fk_user=self.record_id)
570        except User.DoesNotExist:
571            record = None
572        return {
573          'user_perfil': record.fk_vocero,
574          'user': record.fk_user if record else None}
575
576    def forms_valid(self, forms, **kwargs):
577        """
578        Valida el formulario de registro del perfil de usuario
579        @return: Dirige con un mensaje de exito a el home
580        """
581        self.record_id = self.kwargs.get('pk', None)
582        objeto = get_object_or_404(User, pk=self.record_id)
583        if self.record_id is not None:
584            messages.success(self.request, "Usuario %s Actualizado con exito\
585                                           " % (str(objeto.username)))
586        return super(UpdatePerfil, self).forms_valid(forms)
587
588
589class RegisterVocerosView(LoginRequeridoPerAuth, MultiModelFormView):
590    """!
591    Muestra el formulario de registro de usuarios voceros
592
593    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
594    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
595    @date 09-01-2017
596    @version 1.0.0
597    """
598    model = UserProfileVocero
599    form_classes = {
600      'user': FormularioAdminRegVoceros,
601      'user_vocero': FormularioRegVoceros,
602    }
603    template_name = 'users.register.vocero.html'
604    success_url = reverse_lazy('users:options')
605    group_required = [u"Administradores"]
606    record_id = None
607
608
609    def get_objects(self, **kwargs):
610        """
611        Carga el formulario en la vista,para actualizar el perfil del  usuario
612        @return: El contexto con los objectos para la vista
613        """
614        self.record_id = self.kwargs.get('pk', None)
615        try:
616            record = self.model.objects.select_related().get(fk_user=self.record_id)
617        except self.model.DoesNotExist:
618            record = None
619        return {
620          'user_vocero': record,
621          'user': record.fk_user if record else None}
622
623    def forms_valid(self, forms, **kwargs):
624        """
625        Valida el formulario del perfil de vocero y usuario
626        @return: Dirige con un mensaje de exito al registro de proyecto
627        """
628        # Campos para instanciar el vocero y actualizar sus campos
629        documento_identidad = forms['user_vocero'].cleaned_data['documento']
630        tipo_documento = forms['user_vocero'].cleaned_data['fk_tipo_documento']
631        organizacion_social = forms['user_vocero'].cleaned_data['organizacion']
632        comite = forms['user_vocero'].cleaned_data['comite_unidad_ejecutiva']
633
634        # Verifica si el vocero tiene registro sobre la organizacion social
635        try:
636            vocero = Vocero.objects.get(fk_org_social=organizacion_social,
637                                        fk_tipo_documento=tipo_documento,
638                                        documento_identidad=documento_identidad)
639            actualizar_vocero = self.form_classes['user_vocero'](
640                                self.request.POST,
641                                instance=vocero)
642            actualizar_vocero.save(commit=False)
643
644            # Crea el nuevo usuario a partir del formulario
645            nuevo_usuario = forms['user'].save()
646            # Agrega al grupo de voceros al nuevo usuario
647            nuevo_usuario.groups.add(Group.objects.get(pk=2))
648            # Actualiza los datos del vocero a parit de la instancia del formulario
649            vocero_actualizado = actualizar_vocero.save()
650            # Asocia el vocero con la nueva cuenta de usuario
651            asociar_voceros = self.model(fk_user=nuevo_usuario,
652                                         fk_vocero=vocero_actualizado)
653            # Si el usuario pertenece a un comite lo asocia
654            if comite is not None:
655                try:
656                    # Asocia el vocero con un comite de la unidad Ejecutiva
657                    comite_unidad = VoceroComite(fk_vocero=vocero_actualizado,
658                                                 fk_comite=comite)
659                    comite_unidad.save()
660                except:
661                    messages.warning(self.request, "Existe un problema al \
662                                                    relacionar el comite a \
663                                                    este vocero")
664            try:
665                # Crea la cuenta de usuario vocero
666                asociar_voceros.save()
667                nombre_vocero = str(vocero_actualizado.nombres) + " \
668                                " + str(vocero_actualizado.apellidos)
669                messages.success(self.request, "Se creo el usuario %s, para el \
670                                                vocero %s" % (
671                                                nuevo_usuario.username,
672                                                nombre_vocero))
673            except:
674                messages.error(self.request, "El voceros al que quieres asociar  \
675                                              a la cuenta ya existe o ya se \
676                                              encuentra asociado")
677                return redirect(self.success_url)
678
679        except:
680            messages.error(self.request, "Este Vocero %s, no se encuentra \
681                                          asociado a esta organizacion: %s" % (
682                                          documento_identidad,
683                                          organizacion_social.nombre))
684            return redirect(self.success_url)
685
686        return redirect(self.success_url)
687
688    def forms_invalid(self, forms, **kwargs):
689
690        return super(RegisterVocerosView, self).forms_invalid(forms)
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.