Merge pull request #3437 from alphagov/group-uploaded-letters

Group uploaded letters by printing date
This commit is contained in:
Chris Hill-Scott
2020-05-19 09:49:04 +01:00
committed by GitHub
15 changed files with 524 additions and 55 deletions

View File

@@ -1,5 +1,7 @@
# -*- coding: utf-8 -*-
from functools import partial
from flask import (
Response,
abort,
@@ -64,7 +66,7 @@ def view_job(service_id, job_id):
just_sent_message = 'Your {} been sent. Printing starts {} at 5:30pm.'.format(
'letter has' if job.notification_count == 1 else 'letters have',
printing_today_or_tomorrow()
printing_today_or_tomorrow(job.created_at)
)
return render_template(
@@ -289,6 +291,11 @@ def get_notifications(service_id, message_type, status_override=None):
status=request.args.get('status'),
message_type=message_type,
download_link=download_link,
single_notification_url=partial(
url_for,
'.view_notification',
service_id=current_service.id,
)
),
}

View File

@@ -120,6 +120,12 @@ def view_notification(service_id, notification_id):
service_id=current_service.id,
job_id=request.args.get('from_job'),
)
elif request.args.get('from_uploaded_letters'):
back_link = url_for(
'main.uploaded_letters',
service_id=current_service.id,
letter_print_day=request.args.get('from_uploaded_letters'),
)
else:
back_link = url_for(
'main.view_notifications',

View File

@@ -3,6 +3,8 @@ import itertools
import json
import urllib
import uuid
from datetime import datetime
from functools import partial
from io import BytesIO
from zipfile import BadZipFile
@@ -25,7 +27,12 @@ from requests import RequestException
from xlrd.biffh import XLRDError
from xlrd.xldate import XLDateError
from app import current_service, notification_api_client, service_api_client
from app import (
current_service,
notification_api_client,
service_api_client,
upload_api_client,
)
from app.extensions import antivirus_client
from app.main import main
from app.main.forms import CsvUploadForm, LetterUploadPostageForm, PDFUploadForm
@@ -42,7 +49,9 @@ from app.utils import (
generate_next_dict,
generate_previous_dict,
get_errors_for_csv,
get_letter_printing_statement,
get_letter_validation_error,
get_page_from_request,
get_sample_template,
get_template,
unicode_truncate,
@@ -80,9 +89,63 @@ def uploads(service_id):
jobs=listed_uploads,
prev_page=prev_page,
next_page=next_page,
now=datetime.utcnow().isoformat(),
)
@main.route("/services/<uuid:service_id>/uploaded-letters/<simple_date:letter_print_day>")
@user_has_permissions()
def uploaded_letters(service_id, letter_print_day):
page = get_page_from_request()
if page is None:
abort(404, "Invalid page argument ({}).".format(request.args.get('page')))
uploaded_letters = upload_api_client.get_letters_by_service_and_print_day(
current_service.id, letter_print_day=letter_print_day, page=page,
)
prev_page = None
if uploaded_letters['links'].get('prev'):
prev_page = generate_previous_dict('.uploaded_letters', service_id, page, url_args={
'letter_print_day': letter_print_day
})
next_page = None
if uploaded_letters['links'].get('next'):
next_page = generate_next_dict('.uploaded_letters', service_id, page, url_args={
'letter_print_day': letter_print_day
})
return render_template(
'views/uploads/uploaded-letters.html',
notifications=add_preview_of_content_uploaded_letters(
uploaded_letters['notifications']
),
prev_page=prev_page,
next_page=next_page,
show_pagination=True,
total=uploaded_letters['total'],
letter_printing_statement=get_letter_printing_statement(
'created',
letter_print_day,
),
letter_print_day=letter_print_day,
single_notification_url=partial(
url_for,
'.view_notification',
service_id=current_service.id,
from_uploaded_letters=letter_print_day,
)
)
def add_preview_of_content_uploaded_letters(notifications):
for notification in notifications:
yield(dict(
preview_of_content=', '.join(notification.pop('to').splitlines()),
to=notification['client_reference'],
**notification
))
@main.route("/services/<uuid:service_id>/upload-letter", methods=['GET', 'POST'])
@user_has_permissions('send_messages')
def upload_letter(service_id):