mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-19 14:09:20 -04:00
Merge pull request #979 from alphagov/4-days-scheduled
Allow a job to be scheduled any time in next 4 days
This commit is contained in:
@@ -27,27 +27,58 @@ from app.main.validators import (Blacklist, CsvFileValidator, ValidGovEmail, NoC
|
||||
def get_time_value_and_label(future_time):
|
||||
return (
|
||||
future_time.replace(tzinfo=None).isoformat(),
|
||||
get_human_time(future_time.astimezone(pytz.timezone('Europe/London')))
|
||||
'{} at {}'.format(
|
||||
get_human_day(future_time.astimezone(pytz.timezone('Europe/London'))),
|
||||
get_human_time(future_time.astimezone(pytz.timezone('Europe/London')))
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def get_human_time(time):
|
||||
return {
|
||||
'0': 'Midnight',
|
||||
'12': 'Midday'
|
||||
'0': 'midnight',
|
||||
'12': 'midday'
|
||||
}.get(
|
||||
time.strftime('%-H'),
|
||||
time.strftime('%-I%p').lower()
|
||||
)
|
||||
|
||||
|
||||
def get_next_hours_from(now, hours=23):
|
||||
def get_human_day(time, prefix_today_with='T'):
|
||||
# Add 1 hour to get ‘midnight today’ instead of ‘midnight tomorrow’
|
||||
time = (time - timedelta(hours=1)).strftime('%A')
|
||||
if time == datetime.utcnow().strftime('%A'):
|
||||
return '{}oday'.format(prefix_today_with)
|
||||
if time == (datetime.utcnow() + timedelta(days=1)).strftime('%A'):
|
||||
return 'Tomorrow'
|
||||
return time
|
||||
|
||||
|
||||
def get_furthest_possible_scheduled_time():
|
||||
return (datetime.utcnow() + timedelta(days=4)).replace(hour=0)
|
||||
|
||||
|
||||
def get_next_hours_until(until):
|
||||
now = datetime.utcnow()
|
||||
hours = int((until - now).total_seconds() / (60 * 60))
|
||||
return [
|
||||
(now + timedelta(hours=i)).replace(minute=0, second=0).replace(tzinfo=pytz.utc)
|
||||
for i in range(1, hours + 1)
|
||||
]
|
||||
|
||||
|
||||
def get_next_days_until(until):
|
||||
now = datetime.utcnow()
|
||||
days = int((until - now).total_seconds() / (60 * 60 * 24))
|
||||
return [
|
||||
get_human_day(
|
||||
(now + timedelta(days=i)).replace(tzinfo=pytz.utc),
|
||||
prefix_today_with='Later t'
|
||||
)
|
||||
for i in range(0, days + 1)
|
||||
]
|
||||
|
||||
|
||||
def email_address(label='Email address', gov_user=True):
|
||||
validators = [
|
||||
Length(min=5, max=255),
|
||||
@@ -310,8 +341,11 @@ class ChooseTimeForm(Form):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(ChooseTimeForm, self).__init__(*args, **kwargs)
|
||||
self.scheduled_for.choices = [('', 'Now')] + [
|
||||
get_time_value_and_label(hour) for hour in get_next_hours_from(datetime.utcnow())
|
||||
get_time_value_and_label(hour) for hour in get_next_hours_until(
|
||||
get_furthest_possible_scheduled_time()
|
||||
)
|
||||
]
|
||||
self.scheduled_for.categories = get_next_days_until(get_furthest_possible_scheduled_time())
|
||||
|
||||
scheduled_for = RadioField(
|
||||
'When should Notify send these messages?',
|
||||
|
||||
@@ -21,7 +21,7 @@ from notifications_utils.template import Template
|
||||
from notifications_utils.recipients import RecipientCSV, first_column_heading, validate_and_format_phone_number
|
||||
|
||||
from app.main import main
|
||||
from app.main.forms import CsvUploadForm, ChooseTimeForm
|
||||
from app.main.forms import CsvUploadForm, ChooseTimeForm, get_next_days_until, get_furthest_possible_scheduled_time
|
||||
from app.main.uploader import (
|
||||
s3upload,
|
||||
s3download
|
||||
|
||||
Reference in New Issue
Block a user