From bd36508a7f3c61f2c36970cf100a85f8e058368a Mon Sep 17 00:00:00 2001 From: Olga Komleva Date: Wed, 22 Nov 2023 12:13:09 +0300 Subject: [PATCH] Change validate dates in project --- backend/api/validators.py | 87 +++++++++++++++++++++++++++++++-------- 1 file changed, 70 insertions(+), 17 deletions(-) diff --git a/backend/api/validators.py b/backend/api/validators.py index 5652b40..49f129e 100644 --- a/backend/api/validators.py +++ b/backend/api/validators.py @@ -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, ): @@ -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, )