diff --git a/apps/payment/models.py b/apps/payment/models.py index 2de1c26a..a55ce8c5 100644 --- a/apps/payment/models.py +++ b/apps/payment/models.py @@ -9,6 +9,8 @@ from django.contrib.postgres.fields import ArrayField, JSONField from django.core.validators import RegexValidator from django.utils.timezone import now +from project.utils import weekday_in_date_range + from apps.course.models import Course from apps.config.models import Config from apps.school.models import SchoolSchedule @@ -164,7 +166,11 @@ class SchoolPayment(Payment): ).aggregate( models.Sum('month_price'), ) - month_price_sum = aggregate.get('month_price__sum', 0) + if self.add_days: + weekday_count = weekday_in_date_range(self.date_start, self.date_end, self.weekdays[0]) + month_price_sum = aggregate.get('month_price__sum', 0) * weekday_count / 30 + else: + month_price_sum = aggregate.get('month_price__sum', 0) if month_price_sum > config.SERVICE_DISCOUNT_MIN_AMOUNT: discount = config.SERVICE_DISCOUNT else: diff --git a/project/utils.py b/project/utils.py new file mode 100644 index 00000000..38f04b76 --- /dev/null +++ b/project/utils.py @@ -0,0 +1,14 @@ +from datetime import timedelta +from collections import Counter + + +def date_range(start, end): + delta = end - start + for d in range(delta.days + 1): + yield start + timedelta(days=d) + return + + +def weekday_in_date_range(start, end, weekday): + counter = Counter([d.isoweekday() for d in date_range(start, end)]) + return counter.get(weekday, None)