Example #1
0
    def get_queryset(self):
        qry = AssignmentGroup.active_where_is_candidate(self.request.user)
        qry = qry.filter(is_open=True)
        qry = qry.filter(
            parentnode__delivery_types=0
        )  # Only include ELECTRONIC - for now this makes sense, and if we need NON-ELECTRONIC, we make a new API, or add an option to this API.
        qry = qry.annotate(newest_deadline=Max("deadlines__deadline"))
        qry = qry.annotate(deadline_count=Count("deadlines__deadline"))
        qry = qry.filter(deadline_count__gt=0)

        # Only include assignments with one of:
        #   - SOFT deadline handling
        #   - deadline has NOT expired
        qry = qry.filter(Q(parentnode__deadline_handling=0) | Q(newest_deadline__gt=datetime.now()))

        only = self.request.GET.get("only", "")
        if only:
            if only == "deadline_not_expired":
                qry = qry.filter(newest_deadline__gte=datetime.now())
            elif only == "deadline_expired":
                qry = qry.filter(newest_deadline__lt=datetime.now())
            else:
                raise BadRequestError(
                    "Invalid value for ``only``. Specify one of ``deadline_not_expired`` or ``deadline_expired``."
                )
        qry = qry.order_by("newest_deadline")
        return qry
Example #2
0
 def get(self, request):
     devilry_qualifiesforexam_enabled = 'devilry_qualifiesforexam' in settings.INSTALLED_APPS
     if self.request.GET.get('activeonly', False) == 'true':
         qry = AssignmentGroup.active_where_is_candidate(self.request.user)
     else:
         qry = AssignmentGroup.published_where_is_candidate(self.request.user)
     return GroupedBySubjectSerialize(qry, devilry_qualifiesforexam_enabled, request.user).serialize()
Example #3
0
    def get_queryset(self):
        qry = AssignmentGroup.active_where_is_candidate(self.request.user)
        qry = qry.filter(is_open=True)
        qry = qry.annotate(newest_deadline=Max('deadlines__deadline'))
        qry = qry.annotate(deadline_count=Count('deadlines__deadline'))
        qry = qry.filter(deadline_count__gt=0)

        # Only include assignments with one of:
        #   - SOFT deadline handling
        #   - deadline has NOT expired
        qry = qry.filter(Q(parentnode__deadline_handling=0) |
                         Q(newest_deadline__gt=datetime.now()))

        only = self.request.GET.get('only', '')
        if only:
            if only == 'deadline_not_expired':
                qry = qry.filter(newest_deadline__gte=datetime.now())
            elif only == 'deadline_expired':
                qry = qry.filter(newest_deadline__lt=datetime.now())
            else:
                raise BadRequestError('Invalid value for ``only``. Specify one of ``deadline_not_expired`` or ``deadline_expired``.')
        qry = qry.order_by('newest_deadline')
        return qry