Merge pull request #1362 from alphagov/letter-delivery-estimates

Add function to estimate letter delivery date
This commit is contained in:
Chris Hill-Scott
2017-07-18 09:44:56 +01:00
committed by GitHub
3 changed files with 179 additions and 8 deletions

View File

@@ -7,7 +7,6 @@ from time import monotonic
import dateutil
import itertools
import pytz
import ago
from flask import (
Flask,
@@ -55,6 +54,8 @@ from app.notify_client.organisations_client import OrganisationsClient
from app.notify_client.models import AnonymousUser
from app.notify_client.letter_jobs_client import LetterJobsClient
from app.utils import gmt_timezones
login_manager = LoginManager()
csrf = CsrfProtect()
@@ -212,12 +213,6 @@ def syntax_highlight_json(code):
return Markup(highlight(code, JavascriptLexer(), HtmlFormatter(noclasses=True)))
def gmt_timezones(date):
date = dateutil.parser.parse(date)
forced_utc = date.replace(tzinfo=pytz.utc)
return forced_utc.astimezone(pytz.timezone('Europe/London'))
def format_datetime(date):
return '{} at {}'.format(
format_date(date),

View File

@@ -1,10 +1,13 @@
import re
import csv
import pytz
from io import StringIO
from os import path
from functools import wraps
import unicodedata
from collections import namedtuple
from datetime import datetime, timedelta, timezone
from dateutil import parser
import dateutil
import ago
@@ -324,3 +327,40 @@ def get_time_left(created_at):
def email_or_sms_not_enabled(template_type, permissions):
return (template_type in ['email', 'sms']) and (template_type not in permissions)
def get_letter_timings(upload_time):
LetterTimings = namedtuple(
'LetterTimings',
'printed_by, is_printed, earliest_delivery, latest_delivery'
)
# shift anything after 5pm to the next day
processing_day = gmt_timezones(upload_time) + timedelta(hours=(7))
print_day, earliest_delivery, latest_delivery = (
processing_day + timedelta(days=days)
for days in {
'Wednesday': (1, 3, 5),
'Thursday': (1, 4, 5),
'Friday': (3, 5, 6),
'Saturday': (2, 4, 5),
}.get(processing_day.strftime('%A'), (1, 3, 4))
)
printed_by = print_day.astimezone(pytz.timezone('Europe/London')).replace(hour=15, minute=0)
now = datetime.utcnow().replace(tzinfo=pytz.timezone('Europe/London'))
return LetterTimings(
printed_by=printed_by,
is_printed=(now > printed_by),
earliest_delivery=earliest_delivery,
latest_delivery=latest_delivery,
)
def gmt_timezones(date):
date = dateutil.parser.parse(date)
forced_utc = date.replace(tzinfo=pytz.utc)
return forced_utc.astimezone(pytz.timezone('Europe/London'))