From 5df9be9188c3c1842e9bc2299534c8b7c5f2e851 Mon Sep 17 00:00:00 2001 From: Skia Date: Mon, 12 Jun 2017 22:53:25 +0200 Subject: [PATCH] Move computing of start of semester to core/utils Signed-off-by: Skia --- core/utils.py | 29 ++++++++++++++++++++++++++++- subscription/models.py | 14 ++------------ 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/core/utils.py b/core/utils.py index 07bc7bcb..d2e12fc8 100644 --- a/core/utils.py +++ b/core/utils.py @@ -27,11 +27,38 @@ import re # Image utils from io import BytesIO +from datetime import datetime, timezone, date + from PIL import Image, ExifTags -# from exceptions import IOError import PIL + +from django.conf import settings from django.core.files.base import ContentFile + +def get_start_of_semester(d=date.today()): + """ + This function computes the start date of the semester with respect to the given date (default is today), + and the start date given in settings.SITH_START_DATE. + It takes the nearest past start date. + Exemples: with SITH_START_DATE = (8, 15) + Today -> Start date + 2015-03-17 -> 2015-02-15 + 2015-01-11 -> 2014-08-15 + """ + today = d + year = today.year + start = date(year, settings.SITH_START_DATE[0], settings.SITH_START_DATE[1]) + start2 = start.replace(month=(start.month+6)%12) + if start > start2: + start, start2 = start2, start + if today < start: + return start2.replace(year=year-1) + elif today < start2: + return start + else: + return start2 + def scale_dimension(width, height, long_edge): if width > height: ratio = long_edge * 1. / width diff --git a/subscription/models.py b/subscription/models.py index a1146a10..d189d0ab 100644 --- a/subscription/models.py +++ b/subscription/models.py @@ -32,6 +32,7 @@ from django.core.urlresolvers import reverse from django.contrib.auth.forms import PasswordResetForm from core.models import User +from core.utils import get_start_of_semester @@ -147,18 +148,7 @@ class Subscription(models.Model): """ if duration <= 2: # Sliding subscriptions for 1 or 2 semesters return d - today = d - year = today.year - start = date(year, settings.SITH_START_DATE[0], settings.SITH_START_DATE[1]) - start2 = start.replace(month=(start.month+6)%12) - if start > start2: - start, start2 = start2, start - if today < start: - return start2.replace(year=year-1) - elif today < start2: - return start - else: - return start2 + return get_start_of_semester(d) @staticmethod def compute_end(duration, start=None):