|
|
|
@ -10,6 +10,7 @@ from ..utils.extensions import plural_format |
|
|
|
from django.utils.formats import date_format |
|
|
|
from django.utils.formats import date_format |
|
|
|
from ..utils.licence_validator import LicenseValidator |
|
|
|
from ..utils.licence_validator import LicenseValidator |
|
|
|
from django.apps import apps |
|
|
|
from django.apps import apps |
|
|
|
|
|
|
|
from django.conf import settings |
|
|
|
|
|
|
|
|
|
|
|
class TeamSortingType(models.IntegerChoices): |
|
|
|
class TeamSortingType(models.IntegerChoices): |
|
|
|
RANK = 1, 'Rank' |
|
|
|
RANK = 1, 'Rank' |
|
|
|
@ -1529,6 +1530,11 @@ class Tournament(BaseModel): |
|
|
|
|
|
|
|
|
|
|
|
# 6. Use the more restrictive rule (smaller time window) |
|
|
|
# 6. Use the more restrictive rule (smaller time window) |
|
|
|
minutes_to_confirm = min(time_based_minutes, waitlist_based_minutes) |
|
|
|
minutes_to_confirm = min(time_based_minutes, waitlist_based_minutes) |
|
|
|
|
|
|
|
live_testing = getattr(settings, 'LIVE_TESTING', False) |
|
|
|
|
|
|
|
# Divide by 10 if LIVE_TESTING is enabled |
|
|
|
|
|
|
|
if live_testing: |
|
|
|
|
|
|
|
minutes_to_confirm = minutes_to_confirm / 10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 7. Check urgency overrides |
|
|
|
# 7. Check urgency overrides |
|
|
|
apply_business_rules = True |
|
|
|
apply_business_rules = True |
|
|
|
@ -1536,21 +1542,24 @@ class Tournament(BaseModel): |
|
|
|
if hours_until_tournament <= hours_threshold: |
|
|
|
if hours_until_tournament <= hours_threshold: |
|
|
|
apply_business_rules = False |
|
|
|
apply_business_rules = False |
|
|
|
# Ensure minimum response time |
|
|
|
# Ensure minimum response time |
|
|
|
minutes_to_confirm = max(minutes_to_confirm, URGENCY_OVERRIDE["minimum_response_time"]) |
|
|
|
minutes_to_confirm = max(minutes_to_confirm, |
|
|
|
|
|
|
|
URGENCY_OVERRIDE["minimum_response_time"] / 10 if getattr(settings, 'LIVE_TESTING', False) |
|
|
|
|
|
|
|
else URGENCY_OVERRIDE["minimum_response_time"]) |
|
|
|
break |
|
|
|
break |
|
|
|
|
|
|
|
|
|
|
|
# 8. Calculate raw deadline |
|
|
|
# 8. Calculate raw deadline |
|
|
|
raw_deadline = current_time + timezone.timedelta(minutes=minutes_to_confirm) |
|
|
|
raw_deadline = current_time + timezone.timedelta(minutes=minutes_to_confirm) |
|
|
|
|
|
|
|
|
|
|
|
# 9. Round up to next 30-minute mark |
|
|
|
# 9. Round up to next interval mark based on BACKGROUND_SCHEDULED_TASK_INTERVAL |
|
|
|
|
|
|
|
interval = settings.BACKGROUND_SCHEDULED_TASK_INTERVAL |
|
|
|
minute = raw_deadline.minute |
|
|
|
minute = raw_deadline.minute |
|
|
|
if minute % 30 != 0: |
|
|
|
if minute % interval != 0: |
|
|
|
# Minutes to next 30-minute mark |
|
|
|
# Minutes to next interval mark |
|
|
|
minutes_to_add = 30 - (minute % 30) |
|
|
|
minutes_to_add = interval - (minute % interval) |
|
|
|
raw_deadline += timezone.timedelta(minutes=minutes_to_add) |
|
|
|
raw_deadline += timezone.timedelta(minutes=minutes_to_add) |
|
|
|
|
|
|
|
|
|
|
|
# 10. Apply business hours rules if needed |
|
|
|
# 10. Apply business hours rules if needed |
|
|
|
if apply_business_rules: |
|
|
|
if apply_business_rules and live_testing is False: |
|
|
|
# Check if deadline falls outside business hours |
|
|
|
# Check if deadline falls outside business hours |
|
|
|
is_weekend = raw_deadline.weekday() in BUSINESS_RULES["days"]["weekend"] |
|
|
|
is_weekend = raw_deadline.weekday() in BUSINESS_RULES["days"]["weekend"] |
|
|
|
before_hours = raw_deadline.hour < BUSINESS_RULES["hours"]["start"] |
|
|
|
before_hours = raw_deadline.hour < BUSINESS_RULES["hours"]["start"] |
|
|
|
|