source: consulta_publica/users/views.py @ 4ba8671

constituyenteestudiantesgeneralplan_patriasala
Last change on this file since 4ba8671 was e26ee47, checked in by rudmanmrrod <rudman22@…>, 7 años ago

Solucionado bug de actualizar perfil

  • Propiedad mode establecida a 100644
File size: 10.0 KB
Línea 
1# -*- coding: utf-8 -*-
2"""
3Sistema de Consulta Pública
4
5Copyleft (@) 2017 CENDITEL nodo Mérida - https://planificacion.cenditel.gob.ve/trac/wiki/ModeladoTopicos_2017
6"""
7## @package participacion.views
8#
9# Vistas correspondientes a la aplicación participacion
10# @author Rodrigo Boet (rboet at cenditel.gob.ve)
11# @author <a href='http://www.cenditel.gob.ve'>Centro Nacional de Desarrollo e Investigación en Tecnologías Libres
12# (CENDITEL) nodo Mérida - Venezuela</a>
13# @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
14# @version 1.0
15from django.shortcuts import render, redirect
16from django.views.generic import FormView, RedirectView, CreateView, UpdateView
17from django.contrib.auth.mixins import LoginRequiredMixin
18from django.contrib.messages.views import SuccessMessageMixin
19from django.contrib.auth import authenticate, logout, login
20from django.core.urlresolvers import reverse_lazy
21from django.contrib.auth.models import User, Group
22from django.contrib import messages
23from .forms import LoginForm, UserRegisterForm, PerfilForm
24from .models import Perfil
25from base.models import Parroquia
26
27class LoginView(FormView):
28    """!
29    Clase que gestiona la vista principal del logeo de usuario
30
31    @author Rodrigo Boet (rboet at cenditel.gob.ve)
32    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
33    @date 01-03-2017
34    @version 1.0.0
35    """
36    form_class = LoginForm
37    template_name = 'user.login.html'
38
39    def get_success_url(self):
40        """!
41        Metodo que permite definir la url de dirección al ser válido el formulario
42   
43        @author Rodrigo Boet (rboet at cenditel.gob.ve)
44        @copyright GNU/GPLv2
45        @date 22-02-2017
46        @param self <b>{object}</b> Objeto que instancia la clase
47        @return Retorna la url
48        """
49        grupo = self.request.user.groups.get()
50        if('Participante' in grupo.name):
51            return reverse_lazy('participacion_index')
52        elif('Administrador' in grupo.name):
53            return reverse_lazy('administrador_base')
54
55    def form_valid(self, form):
56        """!
57        Metodo que valida si el formulario es valido
58   
59        @author Rodrigo Boet (rboet at cenditel.gob.ve)
60        @copyright GNU/GPLv2
61        @date 01-03-2017
62        @param self <b>{object}</b> Objeto que instancia la clase
63        @param form <b>{object}</b> Objeto que contiene el formulario de registro
64        @return Retorna el formulario validado
65        """
66        usuario = form.cleaned_data['usuario']
67        contrasena = form.cleaned_data['contrasena']
68        usuario = authenticate(username=usuario, password=contrasena)
69        login(self.request, usuario)
70        if self.request.POST.get('remember_me') is not None:
71            # Session expira a los dos meses si no se deslogea
72            self.request.session.set_expiry(1209600)
73        return super(LoginView, self).form_valid(form)
74   
75   
76class LogoutView(RedirectView):
77    """!
78    Clase que gestiona la vista principal del deslogeo de usuario
79
80    @author Rodrigo Boet (rboet at cenditel.gob.ve)
81    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
82    @date 01-03-2017
83    @version 1.0.0
84    """
85    permanent = False
86    query_string = True
87
88    def get_redirect_url(self):
89        """!
90        Metodo que permite definir la url de dirección al ser válido el formulario
91   
92        @author Rodrigo Boet (rboet at cenditel.gob.ve)
93        @copyright GNU/GPLv2
94        @date 01-03-2017
95        @param self <b>{object}</b> Objeto que instancia la clase
96        @return Retorna la url
97        """
98        logout(self.request)
99        return reverse_lazy('login')
100
101
102class RegisterView(SuccessMessageMixin,FormView):
103    """!
104    Muestra el formulario de registro de usuarios
105
106    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
107    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
108    @date 09-01-2017
109    @version 1.0.0
110    """
111    template_name = "user.register.html"
112    form_class = UserRegisterForm
113    success_url = reverse_lazy('login')
114    success_message = "Se registró con éxito"
115    model = User
116
117    def form_valid(self, form, **kwargs):
118        """!
119        Metodo que valida si el formulario es valido
120   
121        @author Rodrigo Boet (rboet at cenditel.gob.ve)
122        @copyright GNU/GPLv2
123        @date 20-04-2017
124        @param self <b>{object}</b> Objeto que instancia la clase
125        @param form <b>{object}</b> Objeto que contiene el formulario de registro
126        @return Retorna el formulario validado
127        """
128        self.object = form.save()
129        self.object.username = form.cleaned_data['username']
130        self.object.first_name = form.cleaned_data['nombre']
131        self.object.last_name = form.cleaned_data['apellido']
132        self.object.set_password(form.cleaned_data['password'])
133        self.object.email = form.cleaned_data['email']
134        self.object.save()
135       
136        ## Se asigna el grupo de Participantes por defecto
137        self.object.groups.add(2)
138       
139        parroquia = Parroquia.objects.get(id=form.cleaned_data['parroquia'])
140       
141        perfil = Perfil()
142        perfil.cedula = form.cleaned_data['cedula']
143        perfil.sector = form.cleaned_data['sector']
144        if(perfil.sector=='TR'):
145            perfil.sector_trabajador = form.cleaned_data['sector_trabajador']
146        elif(perfil.sector=='ES'):
147            perfil.sector_estudiante = form.cleaned_data['sector_estudiante']
148        perfil.participacion = form.cleaned_data['participacion']
149        if(perfil.participacion=='CO'):
150            perfil.colectivo = form.cleaned_data['colectivo']
151        perfil.parroquia = parroquia
152        perfil.user = self.object
153        perfil.save() 
154       
155        return super(RegisterView, self).form_valid(form)
156   
157class PerfilUpdate(SuccessMessageMixin,LoginRequiredMixin,UpdateView):
158    """!
159    Clase que gestiona la actualización del perfil
160
161    @author Rodrigo Boet (rboet at cenditel.gob.ve)
162    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
163    @date 24-04-2017
164    @version 1.0.0
165    """
166    model = Perfil
167    template_name = "perfil.update.html"
168    form_class = PerfilForm
169    success_message = "Se actualizó el perfil con éxito"
170   
171    def dispatch(self, request, *args, **kwargs):
172        """
173        Metodo que redirecciona al usuario si no cuenta con los permisos
174   
175        @author Rodrigo Boet (rboet at cenditel.gob.ve)
176        @copyright GNU/GPLv2
177        @date 24-04-2017
178        @param self <b>{object}</b> Objeto que instancia la clase
179        @param request <b>{object}</b> Objeto que contiene la petición
180        @param args <b>{object}</b> Objeto que contiene los argumentos
181        @param kwargs <b>{object}</b> Objeto que contiene los datos de contexto
182        @return Direcciona al 403 si no es su perfil
183        """
184        if int(self.request.user.id) != int(self.kwargs['pk']):
185           return redirect('base_403')
186        return super(PerfilUpdate, self).dispatch(request, *args, **kwargs)
187   
188    def get_object(self, queryset=None):
189        """
190        Metodo para obtener el objeto de la consulta
191   
192        @author Rodrigo Boet (rboet at cenditel.gob.ve)
193        @copyright GNU/GPLv2
194        @date 24-05-2017
195        @param self <b>{object}</b> Objeto que instancia la clase
196        @param queryset <b>{object}</b> Objeto que contiene una consulta
197        @return El objeto del perfil
198        """
199        obj = Perfil.objects.get(user_id=self.kwargs['pk'])
200        return obj
201   
202    def get_success_url(self):
203        """!
204        Metodo que permite definir la url de dirección al ser válido el formulario
205   
206        @author Rodrigo Boet (rboet at cenditel.gob.ve)
207        @copyright GNU/GPLv2
208        @date 24-04-2017
209        @param self <b>{object}</b> Objeto que instancia la clase
210        @return Retorna la url
211        """
212        return reverse_lazy('update',
213                            kwargs={'pk': self.kwargs['pk']})
214   
215    def get_initial(self):
216        """!
217        Metodo para agregar valores de inicio al formulario
218   
219        @author Rodrigo Boet (rboet at cenditel.gob.ve)
220        @copyright GNU/GPLv2
221        @date 24-04-2017
222        @param self <b>{object}</b> Objeto que instancia la clase
223        @return Retorna los valores iniciales
224        """
225        initial = super(PerfilUpdate, self).get_initial()
226        perfil = Perfil.objects.get(user_id=self.kwargs['pk'])
227        initial['parroquia'] = perfil.parroquia_id
228        initial['municipio'] = perfil.parroquia.municipio_id
229        initial['estado'] = perfil.parroquia.municipio.entidad_id
230        initial['sector'] = perfil.sector
231        initial['participacion'] = perfil.participacion
232        initial['colectivo'] = perfil.colectivo
233   
234        return initial
235   
236    def form_valid(self,form):
237        """!
238        Metodo que valida si el formulario es valido
239   
240        @author Rodrigo Boet (rboet at cenditel.gob.ve)
241        @copyright GNU/GPLv2
242        @date 24-04-2017
243        @param self <b>{object}</b> Objeto que instancia la clase
244        @param form <b>{object}</b> Objeto que contiene el formulario de registro
245        @return Retorna el formulario validado
246        """
247        parroquia = Parroquia.objects.get(id=form.cleaned_data['parroquia'])
248       
249        self.object = form.save()
250        self.object.cedula = form.cleaned_data['cedula']
251        self.sector = form.cleaned_data['sector']
252        if(self.sector=='TR'):
253            self.sector_trabajador = form.cleaned_data['sector_trabajador']
254        elif(self.sector=='ES'):
255            self.sector_estudiante = form.cleaned_data['sector_estudiante']
256        self.participacion = form.cleaned_data['participacion']
257        if(self.participacion=='CO'):
258            self.colectivo = form.cleaned_data['colectivo']
259        self.object.parroquia = parroquia
260        self.object.save()
261       
262        return super(PerfilUpdate, self).form_valid(form)
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.