[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) |
---|
[0948a4e] | 112 | messages.info(self.request, 'Bienvenido %s has ingresado al \ |
---|
[57f6191] | 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') |
---|
[0948a4e] | 122 | messages.error(self.request, 'La cuenta está inactiva \ |
---|
[57f6191] | 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\ |
---|
[0948a4e] | 127 | y vuelva a intentar') |
---|
[57f6191] | 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/' |
---|
[0948a4e] | 145 | success_message = "Cambio de contraseña realizada con éxito" |
---|
[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 |
---|
[cd20b73] | 213 | @return: Dirige con un mensaje de éxito a el home |
---|
[57f6191] | 214 | """ |
---|
[cd20b73] | 215 | nuevo_usuario = forms['user'].save(commit=False) |
---|
[57f6191] | 216 | nuevo_perfil = forms['user_perfil'].save(commit=False) |
---|
| 217 | usuario = forms['user'].cleaned_data['username'] |
---|
| 218 | grupos = forms['user'].cleaned_data['groups'] |
---|
[cd20b73] | 219 | nuevo_usuario.save() |
---|
[57f6191] | 220 | for group in grupos: |
---|
| 221 | # Agrega a el usuario al(los) grupo(s) seleccionado(s) |
---|
| 222 | nuevo_usuario.groups.add(group.pk) |
---|
[cd20b73] | 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() |
---|
[57f6191] | 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) |
---|
[cd20b73] | 249 | messages.success(self.request, "Usuario %s creado con éxito\ |
---|
[57f6191] | 250 | " % (str(usuario))) |
---|
[6894542] | 251 | return redirect('users:lista_users') |
---|
[57f6191] | 252 | |
---|
[72e62e0] | 253 | def forms_invalid(self, forms, **kwargs): |
---|
| 254 | print (forms) |
---|
| 255 | return super(RegisterView, self).forms_invalid(forms) |
---|
[57f6191] | 256 | |
---|
[ae9886b] | 257 | class 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' |
---|
[def38c0] | 266 | model = UserProfileVocero |
---|
[6894542] | 267 | group_required = [u"Voceros", u"Integrantes"] |
---|
[ae9886b] | 268 | |
---|
[fcaaf27] | 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 | |
---|
[ae9886b] | 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) |
---|
[6894542] | 283 | except self.model.DoesNotExist: |
---|
| 284 | try: |
---|
[89e7114] | 285 | record = UserProfile.objects.select_related().get(fk_user=self.record_id) |
---|
[6894542] | 286 | except User.DoesNotExist: |
---|
| 287 | record = None |
---|
[cd20b73] | 288 | try: |
---|
| 289 | if record.fk_vocero.fk_rol_unidad.pk == 1: |
---|
[67f406d] | 290 | comite = VoceroComite.objects.get(fk_vocero=record.fk_vocero) |
---|
[cd20b73] | 291 | else: |
---|
| 292 | comite = None |
---|
| 293 | except: |
---|
| 294 | comite = {} |
---|
[0948a4e] | 295 | comite['fk_comite'] = "Este vocero no fue asignado a un comité" |
---|
[ae9886b] | 296 | context['upUser'] = record |
---|
[67f406d] | 297 | context['comite'] = comite |
---|
[ae9886b] | 298 | return context |
---|
| 299 | |
---|
| 300 | |
---|
[def38c0] | 301 | class 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 | |
---|
[a206a59] | 353 | def forms_valid(self, forms, **kwargs): |
---|
| 354 | """ |
---|
| 355 | Valida el formulario de registro del perfil de usuario |
---|
[cd20b73] | 356 | @return: Dirige con un mensaje de éxito a el home |
---|
[a206a59] | 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: |
---|
[0948a4e] | 361 | messages.success(self.request, "Usuario %s actualizado con éxito\ |
---|
[a206a59] | 362 | " % (str(objeto.username))) |
---|
| 363 | return super(UpdatePerfilAdmin, self).forms_valid(forms) |
---|
| 364 | |
---|
[def38c0] | 365 | |
---|
| 366 | class 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 |
---|
[cd20b73] | 400 | @return: Dirige con un mensaje de éxito a el home |
---|
[def38c0] | 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: |
---|
[0948a4e] | 405 | messages.success(self.request, "Usuario %s actualizado con éxito\ |
---|
[def38c0] | 406 | " % (str(objeto.username))) |
---|
| 407 | return super(UpdatePerfilAdmin, self).forms_valid(forms) |
---|
| 408 | |
---|
[ae9886b] | 409 | |
---|
[57f6191] | 410 | class 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: |
---|
[0948a4e] | 444 | messages.error(self.request, "Está intentando hacer \ |
---|
| 445 | una acción incorrecta") |
---|
[57f6191] | 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 | |
---|
| 463 | class 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 = { |
---|
[f4c46a7] | 474 | 'user': FormularioAdminUpdate, |
---|
[57f6191] | 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 | """ |
---|
[8601467] | 484 | Carga el formulario en la vista, para registrar usuarios |
---|
[57f6191] | 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) |
---|
[8601467] | 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 |
---|
[57f6191] | 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) |
---|
[8601467] | 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 |
---|
[57f6191] | 528 | return { |
---|
[8601467] | 529 | 'user_perfil': vocero.fk_vocero if vocero else record, |
---|
| 530 | 'user': record.fk_user if record else vocero.fk_user } |
---|
[57f6191] | 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 |
---|
[cd20b73] | 538 | @return: Dirige con un mensaje de éxito a el home |
---|
[57f6191] | 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) |
---|
[0948a4e] | 543 | messages.success(self.request, "Usuario %s actualizado con éxito\ |
---|
[ae9886b] | 544 | " % (str(objeto.username))) |
---|
| 545 | return super(ModalsPerfil, self).forms_valid(forms) |
---|
| 546 | |
---|
| 547 | class 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 | """ |
---|
[def38c0] | 556 | model = UserProfileVocero |
---|
[ae9886b] | 557 | form_classes = { |
---|
| 558 | 'user': FormularioUpdate, |
---|
[67f406d] | 559 | 'user_perfil': FormularioRegVoceros, |
---|
[ae9886b] | 560 | } |
---|
| 561 | template_name = 'users.update.perfil.html' |
---|
| 562 | success_url = reverse_lazy('users:options') |
---|
[def38c0] | 563 | group_required = [u"Voceros"] |
---|
[ae9886b] | 564 | record_id = None |
---|
| 565 | |
---|
[b05044c] | 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) |
---|
[ae9886b] | 570 | |
---|
| 571 | def get_context_data(self, **kwargs): |
---|
| 572 | """ |
---|
[67f406d] | 573 | Carga el formulario en la vista, para registrar usuarios |
---|
[ae9886b] | 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 { |
---|
[67f406d] | 596 | 'user_perfil': record.fk_vocero, |
---|
[ae9886b] | 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 |
---|
[cd20b73] | 602 | @return: Dirige con un mensaje de éxito a el home |
---|
[ae9886b] | 603 | """ |
---|
| 604 | self.record_id = self.kwargs.get('pk', None) |
---|
[f4c46a7] | 605 | objeto = get_object_or_404(User, pk=self.record_id) |
---|
[ae9886b] | 606 | if self.record_id is not None: |
---|
[cd20b73] | 607 | messages.success(self.request, "Usuario %s Actualizado con éxito\ |
---|
[57f6191] | 608 | " % (str(objeto.username))) |
---|
[3b38b3f] | 609 | return super(UpdatePerfil, self).forms_valid(forms) |
---|
| 610 | |
---|
| 611 | |
---|
| 612 | class RegisterVocerosView(LoginRequeridoPerAuth, MultiModelFormView): |
---|
| 613 | """! |
---|
[def38c0] | 614 | Muestra el formulario de registro de usuarios voceros |
---|
[3b38b3f] | 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 | """ |
---|
[def38c0] | 648 | Valida el formulario del perfil de vocero y usuario |
---|
[cd20b73] | 649 | @return: Dirige con un mensaje de éxito al registro de proyecto |
---|
[3b38b3f] | 650 | """ |
---|
[def38c0] | 651 | # Campos para instanciar el vocero y actualizar sus campos |
---|
[3b38b3f] | 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'] |
---|
[def38c0] | 655 | comite = forms['user_vocero'].cleaned_data['comite_unidad_ejecutiva'] |
---|
| 656 | |
---|
| 657 | # Verifica si el vocero tiene registro sobre la organizacion social |
---|
[3b38b3f] | 658 | try: |
---|
| 659 | vocero = Vocero.objects.get(fk_org_social=organizacion_social, |
---|
[def38c0] | 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 \ |
---|
[0948a4e] | 685 | relacionar el comité a \ |
---|
[def38c0] | 686 | este vocero") |
---|
[3b38b3f] | 687 | try: |
---|
[def38c0] | 688 | # Crea la cuenta de usuario vocero |
---|
| 689 | asociar_voceros.save() |
---|
| 690 | nombre_vocero = str(vocero_actualizado.nombres) + " \ |
---|
| 691 | " + str(vocero_actualizado.apellidos) |
---|
[0948a4e] | 692 | messages.success(self.request, "Se creó el usuario %s, para el \ |
---|
[def38c0] | 693 | vocero %s" % ( |
---|
| 694 | nuevo_usuario.username, |
---|
| 695 | nombre_vocero)) |
---|
[3b38b3f] | 696 | except: |
---|
[0948a4e] | 697 | messages.error(self.request, "El vocero al que quieres asociar \ |
---|
[def38c0] | 698 | a la cuenta ya existe o ya se \ |
---|
| 699 | encuentra asociado") |
---|
| 700 | return redirect(self.success_url) |
---|
[3b38b3f] | 701 | |
---|
| 702 | except: |
---|
[0948a4e] | 703 | messages.error(self.request, "Este vocero %s, no se encuentra \ |
---|
| 704 | asociado a esta organización: %s" % ( |
---|
[def38c0] | 705 | documento_identidad, |
---|
| 706 | organizacion_social.nombre)) |
---|
| 707 | return redirect(self.success_url) |
---|
[3b38b3f] | 708 | |
---|
| 709 | return redirect(self.success_url) |
---|
| 710 | |
---|
| 711 | def forms_invalid(self, forms, **kwargs): |
---|
| 712 | |
---|
| 713 | return super(RegisterVocerosView, self).forms_invalid(forms) |
---|