diff --git a/accounts/models.py b/accounts/models.py index 4dc6751..bf02ae4 100644 --- a/accounts/models.py +++ b/accounts/models.py @@ -1,7 +1,7 @@ -# standard library +# Standard library import json -# third-party +# Third-party from social_django.models import UserSocialAuth from social_django.utils import load_strategy @@ -59,6 +59,13 @@ class CustomUser(AbstractUser): ) colectivos = models.CharField(max_length=127, blank=True, null=True) + class Meta: + ordering = ( + 'last_name', + 'last_name_2', + 'first_name', + ) + @property def full_name(self): """Devuelve el nombre completo (nombre y los dos apellidos).""" @@ -75,6 +82,10 @@ def get_full_name(self): def __str__(self): return self.username + def actualizar(self, request): + """Actualiza el usuario con los datos de Gestión de Identidades.""" + get_identidad(load_strategy(request), None, self) + def get_colectivo_principal(self): """Devuelve el colectivo principal del usuario. diff --git a/geo/views.py b/geo/views.py index b0b51cf..0f97d67 100644 --- a/geo/views.py +++ b/geo/views.py @@ -907,23 +907,55 @@ def get_success_url(self): class ProfesorCursoAnyadirView(LoginRequiredMixin, ChecksMixin, View): - """Crea una asignación profesor-curso.""" + """ + Matricula a un usuario como profesor de un curso. + + Crea el usuario si no existe, y crea una asignación profesor-curso. + """ def post(self, request, *args, **kwargs): curso_id = request.POST.get('curso_id') curso = get_object_or_404(Curso, pk=curso_id) + # Obtenemos el usuario (si ya existe en el sistema). User = get_user_model() nip = request.POST.get('nip') profesor = get_object_or_None(User, username=nip) if not profesor: + # El usuario no existe previamente. Lo creamos con los datos de Gestión de Identidades. try: profesor = User.crear_usuario(request, nip) except Exception as ex: messages.error(request, 'ERROR: %s' % ex.args[0]) return redirect('curso_detail', curso_id) + else: + # El usuario existe. Actualizamos sus datos con los de Gestión de Identidades. + try: + profesor.actualizar(self.request) + except Exception as ex: + # Si Identidades devuelve un error, finalizamos mostrando el mensaje de error. + messages.error(request, f'ERROR: {ex}') + return redirect('curso_detail', curso_id) + + # Si el usuario no está activo, finalizamos explicando esta circunstancia. + if not profesor.is_active: + messages.error( + request, + f'ERROR: {profesor.full_name} no está activo en Gestión de Identidades.', + ) + return redirect('curso_detail', curso_id) + + # Si el usuario no tiene email, no podrá entrar en Moodle. + if not profesor.email: + messages.error( + request, + f'ERROR: {profesor.full_name} no tiene establecida' + ' ninguna dirección de correo electrónico en Gestión de Identidades.', + ) + return redirect('curso_detail', curso_id) + # Añadimos al usuario como profesor del curso. try: curso.anyadir_profesor(profesor) except Exception as ex: