Skip to content

Commit

Permalink
Merge pull request #230 from volunteers-for-city-projects/validate-da…
Browse files Browse the repository at this point in the history
…tes-projects

Change validate dates in project
  • Loading branch information
Olga-koml authored Nov 22, 2023
2 parents ccb00b3 + bd36508 commit a8caa4d
Showing 1 changed file with 70 additions and 17 deletions.
87 changes: 70 additions & 17 deletions backend/api/validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ def validate_status_incomes(value):


def validate_dates(
start_date,
end_date,
start_datetime,
end_datetime,
start_date_application,
end_date_application,
):
Expand All @@ -30,39 +30,92 @@ def validate_dates(
"""
NOW = timezone.now()
MAX_ALLOWED_DATE = NOW + timezone.timedelta(days=365)
MIN_DURATION = timezone.timedelta(minutes=10)
# MIN_DURATION = timezone.timedelta(minutes=10)
MAX_DURATION = timezone.timedelta(days=21)
MIN_DURATION_APPLICATION = timezone.timedelta(days=7)
MIN_TIME = 8,
MAX_TIME = 22,
MIN_DURATION_TIME = timezone.timedelta(hours=2),
MAX_DURATION_TIME = timezone.timedelta(hours=9),
errors = {}

if not (NOW <= start_date_application <= MAX_ALLOWED_DATE):
errors.setdefault('start_date_application', []).append(
'Начало подачи заявки должно быть в пределах от текущей даты и '
'времени до года вперед.'
# 'Начало подачи заявки должно быть в пределах от текущей даты и '
# 'времени до года вперед.'
'Заявку можно подать в течение года, начиная от текущей даты'
)
# if not (
# start_date_application + MIN_DURATION
# <= end_date_application
# <= MAX_ALLOWED_DATE
# ):
# errors.setdefault('end_date_application', []).append(
# 'Окончание подачи заявки должно быть позже начала подачи заявок и '
# 'не более чем через год после текущей даты.'
# )
if not (
start_date_application + MIN_DURATION
<= end_date_application
start_date_application + MIN_DURATION_APPLICATION
<= end_date_application <= start_date_application + MAX_DURATION
<= MAX_ALLOWED_DATE
):
errors.setdefault('end_date_application', []).append(
'Окончание подачи заявки должно быть позже начала подачи заявок и '
'не более чем через год после текущей даты.'
'Окончание приема заявок должно быть не ранее чем через 7 дней и '
'не позднее чем за 21 день после начала подачи заявок, '
'а также не позже года от текущей даты.'
)
if not (end_date_application <= start_date <= MAX_ALLOWED_DATE):
if not (end_date_application <= start_datetime <= MAX_ALLOWED_DATE):
errors.setdefault('start_date', []).append(
'Начало мероприятия должно быть в будущем после окончания подачи '
'заявок и не более чем через год после текущей даты.'
# 'Начало мероприятия должно быть в будущем после окончания подачи '
# 'заявок и не более чем через год после текущей даты.'
'Дата начала мероприятия должна быть поздее даты окончания '
'приема заявок и не позднее года от текущей даты'
)
if not (start_date + MIN_DURATION <= end_date <= MAX_ALLOWED_DATE):
# if not (start_date + MIN_DURATION <= end_date <= MAX_ALLOWED_DATE):
# errors.setdefault('end_date', []).append(
# 'Дата окончания мероприятия должна быть позже начала и не более '
# 'чем через год после текущей даты.'
# )
if (
start_datetime.time().hour < MIN_TIME
or start_datetime.time().hour > (MAX_TIME - 2)
):
errors.setdefault('start_datetime', []).append(
'Время начала мероприятия должно быть между 8:00 и 20:00.'
)

if (
end_datetime.time().hour < (MIN_TIME + 2)
or end_datetime.time().hour > MAX_TIME
):
errors.setdefault('end_datetime', []).append(
'Время окончания мероприятия должно быть между 10:00 и 22:00.'
)

if not (
start_datetime + MIN_DURATION_TIME
<= end_datetime <= start_datetime + MAX_DURATION <= MAX_ALLOWED_DATE
):
errors.setdefault('end_datetime', []).append(
'Дата окончания мероприятия должна быть не ранее чем через 2 часа '
'и не позднее чем за 21 день от даты начала мероприятия, а также '
'не позже года от текущей даты'
)

if not (
MIN_DURATION_TIME <= end_datetime - start_datetime <= MAX_DURATION_TIME
):
errors.setdefault('end_date', []).append(
'Дата окончания мероприятия должна быть позже начала и не более '
'чем через год после текущей даты.'
'Длительность мероприятия должна быть не менее '
'2 часов и не более 9 часов.'
)

if errors:
raise serializers.ValidationError(errors)

return (
start_date,
end_date,
start_datetime,
end_datetime,
start_date_application,
end_date_application,
)
Expand Down

0 comments on commit a8caa4d

Please sign in to comment.