mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-15 07:18:58 -04:00
Merge pull request #1362 from alphagov/letter-delivery-estimates
Add function to estimate letter delivery date
This commit is contained in:
@@ -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),
|
||||
|
||||
40
app/utils.py
40
app/utils.py
@@ -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'))
|
||||
|
||||
Reference in New Issue
Block a user