eventoL/eventoL

View on GitHub
eventol/manager/admin/utils.py

Summary

Maintainability
A
2 hrs
Test Coverage
# pylint: disable=too-many-return-statements

from manager.models import Organizer


def filter_model_queryset_by_user(user, model):
    if user.is_superuser:
        return model.objects.all()

    model_name = model._meta.model_name
    organizers = Organizer.objects.filter(event_user__user=user)
    events = [organizer.event_user.event for organizer in organizers.iterator()]

    if model_name == 'event':
        events_ids = [event.id for event in events]
        return model.objects.filter(id__in=events_ids).distinct()

    if model_name in [
            'activity', 'attendee', 'contact', 'contactmessage', 'event_date', 'eventdate',
            'event_user', 'eventuser', 'installationmessage', 'room',
    ]:
        return model.objects.filter(event__in=events).distinct()

    if model_name in ['collaborator', 'installer', 'organizer', 'reviewer']:
        return model.objects.filter(event_user__event__in=events).distinct()

    if model_name == 'user':
        return model.objects.filter(id=user.id)

    if model_name == 'installation':
        return model.objects.filter(installer__event__in=events).distinct()

    if model_name in [
            'activity_type', 'activitytype', 'contacttype', 'customform', 'hardware',
            'software', 'ticket', 'type'
    ]:
        return model.objects.all().distinct()

    return model.objects.none()