def perfil_propio(request): """ Muestra el perfil del usuario que está hecho login enfocado en la actividad """ template = "perfiles/perfil_propio.html" perfil = obtener_perfil(request.user) avatar = obtener_avatar_large(perfil) # Grupos Perfil grupos = None if UsuariosGrupo.objects.filter(perfil=perfil, activo=True).exists(): usuarios_grupo_obj = UsuariosGrupo.objects.filter(perfil=perfil, activo=True).select_related('grupo') grupos = [ug.grupo for ug in usuarios_grupo_obj] # Usuario Leyendo actualmente_leyendo, libros_leidos_usuario = obtener_usuario_leyendo(perfil) libros_disponibles = LibrosDisponibles.objects.filter(perfil=perfil).select_related('libro') # autocomplete Usuario Leyendo titulos_autocomplete = {} autores_autocomplete = {} for l in libros_disponibles: titulos_autocomplete[l.libro.titulo] = (l.libro.id, l.libro.autor) # Muro, comentarios y actividades actividad = [] actividad_0 = obtener_muro_perfil(perfil) for act in actividad_0: if act.__class__.__name__ == "CommentPerfil": actividad.append((act, "comment")) else: actividad.append((act, "notificacion")) for l in libros_disponibles: autores_autocomplete[l.libro.autor] = l.libro.id # Si es admin de una biblioteca, poner link a la biblioteca bibliotecas_compartidas = None context = {'avatar': avatar, 'grupos': grupos, 'actualmente_leyendo': actualmente_leyendo, 'libros_leidos_usuario': libros_leidos_usuario, 'titulos_autocomplete': json.dumps(titulos_autocomplete), 'autores_autocomplete': json.dumps(autores_autocomplete), 'actividad': actividad, 'bibliotecas_compartidas': bibliotecas_compartidas} return render(request, template, context)
def main_grupo_libros(request, id_grupo, queryset): template = "grupos/main_grupo.html" grupo = Grupo.objects.get(id=id_grupo) perfil_usuario = None if request.user.is_authenticated(): perfil_usuario = obtener_perfil(request.user) usuario_es_miembro = False if request.user.is_authenticated(): usuario_es_miembro = UsuariosGrupo.objects.filter(perfil=perfil_usuario, grupo=grupo).exists() usuarios_grupo_obj = UsuariosGrupo.objects.filter(grupo=grupo, activo=True).select_related('perfil') miembros = [usuario_grupo_obj for usuario_grupo_obj in usuarios_grupo_obj] # Invitar a un usuario al grupo usuario_es_admin = False request_invitacion_enviada = False if request.user.is_authenticated(): if usuario_es_miembro: # Si el usuario es miembro, revisar si es admin if UsuariosGrupo.objects.filter(perfil=perfil_usuario, grupo=grupo, es_admin=True).exists(): usuario_es_admin = True else: # Si el usuario no es miembro, revisar si ya envió solicitud if RequestInvitacion.objects.filter(grupo=grupo, usuario_invitado=perfil_usuario, aceptado=False, eliminado=False).exists(): request_invitacion_enviada = True # Requests pendientes de aceptacion al grupo requests_entrar_grupo = None if usuario_es_miembro: if grupo.tipo in [2, 4]: # Si solo los admins pueden aceptar !!! # Si el usuario es admin, mostrar los requests. if usuario_es_admin: requests_entrar_grupo = RequestInvitacion.objects.filter(grupo=grupo, aceptado=False, eliminado=False) else: requests_entrar_grupo = RequestInvitacion.objects.filter(grupo=grupo, aceptado=False, eliminado=False) # Libros disponibles en el Grupo if queryset == "autor": libros_disponibles = LibroDisponibleGrupo.objects.filter(grupo=grupo, activo=True).select_related( "libro_disponible").order_by("libro_disponible__libro__autor") else: libros_disponibles = LibroDisponibleGrupo.objects.filter(grupo=grupo, activo=True).select_related( "libro_disponible") actualmente_leyendo, libros_leidos_usuario = obtener_usuario_leyendo(perfil_usuario) libros_disponibles = [ldg.libro_disponible for ldg in libros_disponibles] context = {'grupo': grupo, 'miembros': miembros, 'requests_entrar_grupo': requests_entrar_grupo, 'usuario_es_admin': usuario_es_admin, 'usuario_es_miembro': usuario_es_miembro, 'request_invitacion_enviada': request_invitacion_enviada, 'libros_disponibles': libros_disponibles, 'filtro': 'libros', 'ordenar_por': queryset, 'actualmente_leyendo': actualmente_leyendo } return render(request, template, context)
def perfil_propio_libros(request): """ Muestra el perfil del usuario loggeado. enfocado en los libros y notificaciones """ template = "perfiles/perfil_propio_libros.html" perfil = obtener_perfil(request.user) avatar = obtener_avatar_large(perfil) # Libros Perfil libros_perfil = { 'tiene_requests_pendientes': False, 'tiene_libros_prestados': False, 'tiene_libros_pedidos': False, 'tiene_libros_pedidos_bcompartida': False } libros_requests = libros_prestados = libros_prestados_bcompartida = libros_pedidos = libros_pedidos_bcompartida = [] if LibrosRequest.objects.filter(perfil_envio=perfil, aceptado=False, eliminado=False).exists(): libros_perfil['tiene_libros_pedidos'] = True libros_pedidos = LibrosRequest.objects.filter(perfil_envio=perfil, aceptado=False, eliminado=False) if LibrosRequestBibliotecaCompartida.objects.filter(perfil_envio=perfil, retirado=False, eliminado=False).exists(): libros_perfil['tiene_libros_pedidos_bcompartida'] = True libros_pedidos_bcompartida = LibrosRequestBibliotecaCompartida.objects.filter(perfil_envio=perfil, retirado=False, eliminado=False).select_related( "libro_disponible") if LibrosRequest.objects.filter(perfil_recepcion=perfil, aceptado=False, eliminado=False).exists(): libros_perfil['tiene_requests_pendientes'] = True libros_requests = LibrosRequest.objects.filter(perfil_recepcion=perfil, aceptado=False, eliminado=False) if LibrosPrestados.objects.filter(perfil_receptor=perfil, fecha_devolucion=None).exists(): libros_perfil['tiene_libros_prestados'] = True libros_prestados = LibrosPrestados.objects.filter(perfil_receptor=perfil, fecha_devolucion=None) if LibrosPrestadosBibliotecaCompartida.objects.filter(perfil_prestamo=perfil, fecha_devolucion=None).exists(): libros_perfil['tiene_libros_prestados'] = True libros_prestados_bcompartida = LibrosPrestadosBibliotecaCompartida.objects.filter(perfil_prestamo=perfil, fecha_devolucion=None) # Grupos Perfil grupos = None if UsuariosGrupo.objects.filter(perfil=perfil, activo=True).exists(): usuarios_grupo_obj = UsuariosGrupo.objects.filter(perfil=perfil, activo=True).select_related('grupo') grupos = [ug.grupo for ug in usuarios_grupo_obj] # Usuario Leyendo actualmente_leyendo, libros_leidos_usuario = obtener_usuario_leyendo(perfil) libros_disponibles = LibrosDisponibles.objects.filter(perfil=perfil).select_related('libro') # autocomplete Usuario Leyendo titulos_autocomplete = {} autores_autocomplete = {} for l in libros_disponibles: titulos_autocomplete[l.libro.titulo] = (l.libro.id, l.libro.autor) for l in libros_disponibles: autores_autocomplete[l.libro.autor] = l.libro.id # Request de entrar a grupos a los que el usuario es admin requests_entrar_grupo = None if UsuariosGrupo.objects.filter(perfil=perfil, es_admin=True).exists(): usuarios_grupo_obj = UsuariosGrupo.objects.filter(perfil=perfil, es_admin=True).select_related('grupo') grupos = [x.grupo for x in usuarios_grupo_obj] requests_entrar_grupo = RequestInvitacion.objects.filter(aceptado=False, grupo__in=grupos) # Si es admin de una biblioteca, poner link a la biblioteca bibliotecas_compartidas = None context = {'libros_perfil': libros_perfil, 'libros_requests': libros_requests, 'libros_prestados': libros_prestados, 'libros_pedidos': libros_pedidos, 'libros_prestados_bcompartida': libros_prestados_bcompartida, 'libros_pedidos_bcompartida': libros_pedidos_bcompartida, 'libros_disponibles': libros_disponibles, 'avatar': avatar, 'grupos': grupos, 'actualmente_leyendo': actualmente_leyendo, 'libros_leidos_usuario': libros_leidos_usuario, 'requests_entrar_grupo': requests_entrar_grupo, 'titulos_autocomplete': json.dumps(titulos_autocomplete), 'autores_autocomplete': json.dumps(autores_autocomplete), 'bibliotecas_compartidas': bibliotecas_compartidas} return render(request, template, context)
def main_grupo_actividad(request, id_grupo): template = "grupos/main_grupo.html" perfil_usuario = None if request.user.is_authenticated(): perfil_usuario = obtener_perfil(request.user) grupo = Grupo.objects.get(id=id_grupo) usuario_es_miembro = False if request.user.is_authenticated(): usuario_es_miembro = UsuariosGrupo.objects.filter(perfil=perfil_usuario, grupo=grupo).exists() usuarios_grupo_obj = UsuariosGrupo.objects.filter(grupo=grupo, activo=True).select_related('perfil') miembros = [u_grupo for u_grupo in usuarios_grupo_obj] # Invitar a un usuario al grupo usuario_es_admin = False request_invitacion_enviada = False if request.user.is_authenticated(): if usuario_es_miembro: # Si el usuario es miembro, revisar si es admin if UsuariosGrupo.objects.filter(perfil=perfil_usuario, grupo=grupo, es_admin=True): usuario_es_admin = True else: # Si el usuario no es miembro, revisar si ya envió solicitud if RequestInvitacion.objects.filter(grupo=grupo, usuario_invitado=perfil_usuario, aceptado=False, eliminado=False).exists(): request_invitacion_enviada = True # Requests pendientes de aceptacion al grupo requests_entrar_grupo = None if usuario_es_miembro: if grupo.tipo in [2, 4]: # Si solo los admins pueden aceptar !!! # Si el usuario es admin, mostrar los requests. if usuario_es_admin: requests_entrar_grupo = RequestInvitacion.objects.filter(grupo=grupo, aceptado=False, eliminado=False) else: requests_entrar_grupo = RequestInvitacion.objects.filter(grupo=grupo, aceptado=False, eliminado=False) comentarios = CommentGrupo.objects.filter(grupo=grupo, eliminado=False).annotate(num_respuestas=Count("respuestas")) notificaciones = Notificacion.objects.filter(grupo=grupo).annotate(num_respuestas=Count("respuestas")) actividad_0 = list(chain(comentarios, notificaciones)) actividad_0.sort(key=lambda x: x.fecha) # Ordena comentarios y notificaciones alternados por fecha. actividad_0.reverse() # Ordena desde el más reciente. actividad = [] for act in actividad_0: if act.__class__.__name__ == "CommentGrupo": actividad.append((act, "comment")) else: actividad.append((act, "notificacion")) actualmente_leyendo, libros_leidos_usuario = obtener_usuario_leyendo(perfil_usuario) context = {'grupo': grupo, 'miembros': miembros, 'requests_entrar_grupo': requests_entrar_grupo, 'usuario_es_admin': usuario_es_admin, 'usuario_es_miembro': usuario_es_miembro, 'request_invitacion_enviada': request_invitacion_enviada, 'actividad': actividad, 'actualmente_leyendo': actualmente_leyendo } return render(request, template, context)