Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
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)
Esempio n. 4
0
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)