source: sapic/users/views.py @ 9120776

Last change on this file since 9120776 was 89e7114, checked in by ltroconis <ltroconis@…>, 6 años ago

Modificado mensaje de error 403

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