source: sapic/users/views.py @ 0948a4e

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

iconos e imágenes

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