mirror of https://github.com/ae-utbm/sith3.git
Fix tests & the method again
This commit is contained in:
parent
0aa6ad841b
commit
471e179d24
|
@ -43,32 +43,36 @@ def get_git_revision_short_hash() -> str:
|
|||
except subprocess.CalledProcessError:
|
||||
return ""
|
||||
|
||||
|
||||
def get_start_of_semester(today=date.today()):
|
||||
def get_start_of_semester(today=date.today()) -> date:
|
||||
"""
|
||||
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
|
||||
Determine in which semester the given date is and return the start date of
|
||||
the corresponding semester
|
||||
|
||||
Args:
|
||||
today (date, optional): The date to test. Defaults to date.today().
|
||||
|
||||
Returns:
|
||||
date: The start date of the semester where the given date belongs
|
||||
|
||||
Context:
|
||||
- if the date is between 15/08 and 31/12 -> autumn semester
|
||||
- if the date is between 01/01 and 15/02 -> autumn semester where the year is the one before of the given date
|
||||
- else between 15/02 and 15/08 -> spring semester
|
||||
"""
|
||||
year = today.year
|
||||
autumn_month, autumn_day = settings.SITH_SEMESTER_START_AUTUMN
|
||||
spring_month, spring_day = settings.SITH_SEMESTER_START_SPRING
|
||||
|
||||
# Get the start date of the autumn semester based on settings.SITH_START_DATE
|
||||
autumn_start = date(year, settings.SITH_START_DATE[0], settings.SITH_START_DATE[1])
|
||||
# Get the start date of the spring semester, 6 months from autumn_start
|
||||
spring_start = autumn_start.replace(month=(autumn_start.month + 6) % 12)
|
||||
if today > date(today.year, autumn_month, autumn_day) and today < date(
|
||||
today.year + 1, 1, 1
|
||||
):
|
||||
return date(today.year, autumn_month, autumn_day)
|
||||
|
||||
# Ensure that spring_start represents the earlier semester start date
|
||||
if autumn_start > spring_start:
|
||||
spring_start, autumn_start = autumn_start, spring_start
|
||||
if today >= date(today.year, 1, 1) and today < date(
|
||||
today.year, spring_month, spring_day
|
||||
):
|
||||
return date(today.year - 1, autumn_month, autumn_day)
|
||||
|
||||
# Determine the appropriate semester start date based on the current date
|
||||
# If today is earlier than spring_start, return the autumn semester start date of the previous year
|
||||
# Otherwise, return the spring semester start date of the current year
|
||||
return autumn_start.replace(year=year - 1) if today < spring_start else spring_start
|
||||
return date(today.year, spring_month, spring_day)
|
||||
|
||||
|
||||
def get_semester(d=date.today()):
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
# OR WITHIN THE LOCAL FILE "LICENSE"
|
||||
#
|
||||
#
|
||||
from datetime import date, timedelta
|
||||
import json
|
||||
import re
|
||||
import string
|
||||
|
@ -25,7 +26,9 @@ from django.utils.timezone import timedelta
|
|||
|
||||
from club.models import Club
|
||||
from core.models import User
|
||||
from core.utils import get_start_of_semester
|
||||
from counter.models import Counter, Customer, BillingInfo, Permanency, Selling, Product
|
||||
from django.conf import settings
|
||||
from sith.settings import SITH_MAIN_CLUB
|
||||
|
||||
|
||||
|
@ -260,6 +263,29 @@ class CounterStatsTest(TestCase):
|
|||
s.customer = root_customer
|
||||
s.save(allow_negative=True)
|
||||
|
||||
def test_get_start_of_semester(self):
|
||||
autumn_month, autumn_day = settings.SITH_SEMESTER_START_AUTUMN
|
||||
spring_month, spring_day = settings.SITH_SEMESTER_START_SPRING
|
||||
|
||||
t1_autumn_day = date(2025, 1, 1)
|
||||
t2_autumn_day = date(2024, 9, 1)
|
||||
|
||||
t1_spring_day = date(2023, 3, 1)
|
||||
t2_spring_day = date(2023, spring_month, spring_day)
|
||||
|
||||
self.assertTrue(
|
||||
get_start_of_semester(t1_autumn_day) == date(2024, autumn_month, autumn_day)
|
||||
)
|
||||
self.assertTrue(
|
||||
get_start_of_semester(t2_autumn_day) == date(2024, autumn_month, autumn_day)
|
||||
)
|
||||
self.assertTrue(
|
||||
get_start_of_semester(t1_spring_day) == date(2023, spring_month, spring_day)
|
||||
)
|
||||
self.assertTrue(
|
||||
get_start_of_semester(t2_spring_day) == date(2023, spring_month, spring_day)
|
||||
)
|
||||
|
||||
def test_not_authenticated_user_fail(self):
|
||||
# Test with not login user
|
||||
response = self.client.get(reverse("counter:stats", args=[self.counter.id]))
|
||||
|
|
|
@ -1354,7 +1354,7 @@ class CounterStatView(DetailView, CounterAdminMixin):
|
|||
|
||||
def get_context_data(self, **kwargs):
|
||||
"""Add stats to the context"""
|
||||
counter = self.object
|
||||
counter: Counter = self.object
|
||||
semester_start = get_start_of_semester()
|
||||
office_hours = counter.get_top_barmen()
|
||||
kwargs = super(CounterStatView, self).get_context_data(**kwargs)
|
||||
|
|
|
@ -327,7 +327,8 @@ SITH_CLUB_ROOT_PAGE = "clubs"
|
|||
|
||||
# Define the date in the year serving as reference for the subscriptions calendar
|
||||
# (month, day)
|
||||
SITH_START_DATE = (8, 15) # 15th August
|
||||
SITH_SEMESTER_START_AUTUMN = (8, 15) # 15 August
|
||||
SITH_SEMESTER_START_SPRING = (2, 15) # 15 February
|
||||
|
||||
# Used to determine the valid promos
|
||||
SITH_SCHOOL_START_YEAR = 1999
|
||||
|
|
|
@ -114,12 +114,12 @@ class Subscription(models.Model):
|
|||
return "No user - " + str(self.pk)
|
||||
|
||||
@staticmethod
|
||||
def compute_start(d=None, duration=1, user=None):
|
||||
def compute_start(d: date = None, duration: int = 1, user: User = None) -> date:
|
||||
"""
|
||||
This function computes the start date of the subscription with respect to the given date (default is today),
|
||||
and the start date given in settings.SITH_START_DATE.
|
||||
and the start date given in settings.SITH_SEMESTER_START_AUTUMN.
|
||||
It takes the nearest past start date.
|
||||
Exemples: with SITH_START_DATE = (8, 15)
|
||||
Exemples: with SITH_SEMESTER_START_AUTUMN = (8, 15)
|
||||
Today -> Start date
|
||||
2015-03-17 -> 2015-02-15
|
||||
2015-01-11 -> 2014-08-15
|
||||
|
@ -135,9 +135,9 @@ class Subscription(models.Model):
|
|||
return get_start_of_semester(d)
|
||||
|
||||
@staticmethod
|
||||
def compute_end(duration, start=None, user=None):
|
||||
def compute_end(duration: int, start: date = None, user: User = None) -> date:
|
||||
"""
|
||||
This function compute the end date of the subscription given a start date and a duration in number of semestre
|
||||
This function compute the end date of the subscription given a start date and a duration in number of semester
|
||||
Exemple:
|
||||
Start - Duration -> End date
|
||||
2015-09-18 - 1 -> 2016-03-18
|
||||
|
@ -153,7 +153,7 @@ class Subscription(models.Model):
|
|||
days=math.ceil((6 * duration - round(6 * duration)) * 30),
|
||||
)
|
||||
|
||||
def can_be_edited_by(self, user):
|
||||
def can_be_edited_by(self, user: User):
|
||||
return user.is_board_member or user.is_root
|
||||
|
||||
def is_valid_now(self):
|
||||
|
|
Loading…
Reference in New Issue