From b130591421c5eae826a6c304c5d6e6126fb8fffa Mon Sep 17 00:00:00 2001 From: gzbender Date: Mon, 24 Jun 2019 14:36:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=B0=D1=82=D1=8B=20=D1=83=D1=80=D0=BE?= =?UTF-8?q?=D0=BA=D0=BE=D0=B2=20=D0=BB=D0=B0=D0=B3=D0=B5=D1=80=D1=8F=20?= =?UTF-8?q?=D1=81=D0=BC=D0=B5=D1=81=D1=82=D0=B8=D0=BB=D0=B8=D1=81=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/payment/models.py | 40 +++++++++++++++++++++++++++------------- apps/school/views.py | 2 +- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/apps/payment/models.py b/apps/payment/models.py index 04e428a6..47ff0d18 100644 --- a/apps/payment/models.py +++ b/apps/payment/models.py @@ -125,31 +125,45 @@ class Payment(PolymorphicModel): ordering = ('created_at',) @classmethod - def get_date_range(cls, date_start=None, days=0, months=0, is_camp=False): + def ajust_date_bounds(cls, date_start=None, date_end=None, is_camp=False): school_start = date(now().year, 9, 1) school_end = date(now().year, 5, 31) camp_start = date(now().year, 6, 1) camp_end = date(now().year, 8, 31) + + if date_start: + if is_camp: + if date_start < camp_start: + date_start = camp_start + elif school_end < date_start < school_start: + date_start = school_start + + if date_end: + if is_camp: + if date_end > camp_end: + date_end = camp_end + elif school_end < date_end < school_start: + date_end = school_end + + if date_start and date_end: + return [date_start, date_end] + else: + return date_start or date_end + + @classmethod + def get_date_range(cls, date_start=None, days=0, months=0, is_camp=False): date_start = date_start or now().date() if isinstance(date_start, datetime): date_start = date_start.date() - if is_camp: - if date_start < camp_start: - date_start = camp_start - if date_start.month == 6 and date_start.day > 16: - date_start = date_start.replace(month=7, day=1) - elif school_end < date_start < school_start: - date_start = school_start + date_start = cls.ajust_date_bounds(date_start=date_start, is_camp=is_camp) + if is_camp and date_start.month == 6 and date_start.day > 16: + date_start = date_start.replace(month=7, day=1) date_end = arrow.get(date_start + timedelta(days=days), settings.TIME_ZONE).shift(months=months).date() - timedelta(1) if months == 1: if is_camp or (date_start.month == 2 and date_start.day >= 28) or (date_start.day == 31 and date_end.day <= 30) \ or (date_start.month == 1 and date_start.day >= 29 and date_end.day == 28): date_end = date_start.replace(day=1, month=date_start.month + 1) - timedelta(1) - if is_camp: - if date_end > camp_end: - date_end = camp_end - elif school_end < date_end < school_start: - date_end = school_end + date_end = cls.ajust_date_bounds(date_end=date_end, is_camp=is_camp) return [date_start, date_end] @classmethod diff --git a/apps/school/views.py b/apps/school/views.py index 0bbe959b..3fb18699 100644 --- a/apps/school/views.py +++ b/apps/school/views.py @@ -69,7 +69,7 @@ class DrawingCampLessonsView(ListView): def get_queryset(self): date_start = (now() - timedelta(days=7)).date() - date_start, date_end = DrawingCampPayment.get_date_range(date_start, days=23, is_camp=True) + date_start, date_end = DrawingCampPayment.ajust_date_bounds(date_start, date_start + timedelta(days=23), is_camp=True) date_range = Q( date__range=[date_start, date_end] )