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