コード例 #1
0
    def get_date_range(cls, start, end):
        # Just filter out future duties.
        or_query = \
            Q(recurrent = True) \
            & Q(date__lte = end)
        if (end - start).days >= 7:
            # Entire week, nothing complicated, we already have it.
            pass
        elif end.weekday() > start.weekday():
            # we are not crossing a week boundary, so just a simple gt/lt
            or_query = or_query \
                & Q(normalized_date__gte = h.normalized_week(start)) \
                & Q(normalized_date__lte = h.normalized_week(end))
        else:
            # We crossed the week boundary, so make it a bit complicated:
            # rather than inclusion, make it exclusion and search outside.
            or_query = or_query \
                & Q(normalized_date__lte = h.normalized_week(start)) \
                & Q(normalized_date__gte = h.normalized_week(end))

        return h.filter_date_range(
            cls.objects,
            'date',
            start,
            end,
            or_query = or_query
        )
コード例 #2
0
    def filter_date_in(cls, days, skip=1):
        """
        Get list of all duties in the next X days. By default it skips
        1 day to start search tomorrow. Can be altered with skip=N.
        """
        since = now().date() + datetime.timedelta(days=skip)
        to = now().date() + datetime.timedelta(days=days)

        # Just filter out future duties.
        or_query = \
            Q(recurrent = True) \
            & Q(date__lte = to)
        if (to - since).days >= 7:
            # Entire week, nothing complicated, we already have it.
            pass
        elif to.weekday() > since.weekday():
            # we are not crossing a week boundary, so just a simple gt/lt
            or_query = or_query \
                & Q(normalized_date__gte = h.normalized_week(since)) \
                & Q(normalized_date__lte = h.normalized_week(to))
        else:
            # We crossed the week boundary, so make it a bit complicated:
            # rather than inclusion, make it exclusion and search outside.
            or_query = or_query \
                & Q(normalized_date__lte = h.normalized_week(since)) \
                & Q(normalized_date__gte = h.normalized_week(to))

        return h.filter_date_range(
                cls.objects,
                'date',
                since,
                to,
                or_query = or_query
            )
コード例 #3
0
    def queryset(self, request, queryset):
        if self.value() == 'today':
            # for 'today' it is simple...
            return queryset.filter(date = now().date())

        if self.value() == 'week':
            future_date = (now() + datetime.timedelta(days=7)).date()
            return h.filter_date_range(
                    queryset,
                    'date',
                    now().date(),
                    future_date
                )
コード例 #4
0
 def filter_birthday_in(cls, days, skip=1):
     """
     Get list of all people with birthday in the next X days.
     By default it skips 1 day to start search tomorrow.
     Can be altered with skip=N.
     """
     future_date = (now() + datetime.timedelta(days=days)).date()
     start = (now() + datetime.timedelta(days=skip)).date()
     return h.filter_date_range(
             cls.objects,
             'birthday',
             h.bday(start.month, start.day),
             h.bday(future_date.month, future_date.day)
         )
コード例 #5
0
 def queryset(self, request, queryset):
     # select by date... Patient.objects.filter(birthday__month=4, birthday__day=1)
     if self.value() == 'today':
         return queryset.filter(
                 birthday = h.bday(now=True)
             )
     if self.value() == 'week':
         future_date = (now() + datetime.timedelta(days=7)).date()
         return h.filter_date_range(
                 queryset,
                 'birthday',
                 h.bday(now=True),
                 h.bday(future_date.month, future_date.day)
             )