Add letter upload form which redirects to blank preview page

Added a form to upload a single letter. Currently this only uses the
form to validate that a file is submitted and that the file is a PDF. If
either of these validations fail, the form will display an error.
Otherwise, we redirect to a new preview page which just has the filename
as the heading for now.
This commit is contained in:
Katie Smith
2019-09-06 10:39:23 +01:00
parent f04512a31d
commit c577416866
8 changed files with 155 additions and 6 deletions

View File

@@ -1109,9 +1109,9 @@ class ServiceLetterBrandingDetails(StripWhitespaceForm):
class PDFUploadForm(StripWhitespaceForm):
file = FileField_wtf(
'Upload a letter in PDF format to check if it fits in the printable area',
'Upload a letter in PDF format',
validators=[
FileAllowed(['pdf'], 'PDF documents only!'),
FileAllowed(['pdf'], 'Letters must be saved as a PDF'),
DataRequired(message="You need to upload a file to submit")
]
)

View File

@@ -1,6 +1,10 @@
from flask import render_template
import uuid
from flask import redirect, render_template, request, url_for
from app import current_service
from app.main import main
from app.main.forms import PDFUploadForm
from app.utils import user_has_permissions
@@ -8,3 +12,31 @@ from app.utils import user_has_permissions
@user_has_permissions('send_messages')
def uploads(service_id):
return render_template('views/uploads/index.html')
@main.route("/services/<service_id>/upload-letter", methods=['GET', 'POST'])
@user_has_permissions('send_messages')
def upload_letter(service_id):
form = PDFUploadForm()
if form.validate_on_submit():
upload_id = uuid.uuid4()
return redirect(
url_for(
'main.uploaded_letter_preview',
service_id=current_service.id,
file_id=upload_id,
original_filename=form.file.data.filename,
)
)
return render_template('views/uploads/choose-file.html', form=form)
@main.route("/services/<service_id>/preview-letter/<file_id>")
@user_has_permissions('send_messages')
def uploaded_letter_preview(service_id, file_id):
original_filename = request.args.get('original_filename')
return render_template('views/uploads/preview.html', original_filename=original_filename)

View File

@@ -304,6 +304,8 @@ class HeaderNavigation(Navigation):
'template_history',
'template_usage',
'trial_mode',
'upload_letter',
'uploaded_letter_preview',
'uploads',
'usage',
'view_job',
@@ -365,6 +367,8 @@ class MainNavigation(Navigation):
'view_template_versions',
},
'uploads': {
'upload_letter',
'uploaded_letter_preview',
'uploads',
},
'team-members': {
@@ -859,6 +863,8 @@ class CaseworkNavigation(Navigation):
'two_factor_email_sent',
'update_email_branding',
'update_letter_branding',
'upload_letter',
'uploaded_letter_preview',
'uploads',
'usage',
'usage_for_all_services',
@@ -1138,6 +1144,8 @@ class OrgNavigation(Navigation):
'two_factor_email_sent',
'update_email_branding',
'update_letter_branding',
'upload_letter',
'uploaded_letter_preview',
'uploads',
'usage',
'usage_for_all_services',

View File

@@ -0,0 +1,28 @@
{% extends "withnav_template.html" %}
{% from "components/file-upload.html" import file_upload %}
{% from "components/page-header.html" import page_header %}
{% block service_page_title %}
Upload a letter
{% endblock %}
{% block maincolumn_content %}
<div class="grid-row">
<div class="column-five-sixths">
{{ page_header(
'Upload a letter',
back_link=url_for('main.uploads', service_id=current_service.id)
) }}
<p>
{{ file_upload(
form.file,
action = url_for('main.upload_letter', service_id=current_service.id),
)}}
</p>
<p>You can upload a single letter as a PDF.</p>
<p>Your file must meet our <a href="https://docs.notifications.service.gov.uk/documentation/images/notify-pdf-letter-spec-v2.3.pdf">letter specification</a>.</p>
</div>
</div>
{% endblock %}

View File

@@ -7,10 +7,12 @@
{% block maincolumn_content %}
<div class="grid-row">
<div class="column-two-thirds">
<div class="column-five-sixths">
{{ page_header('Uploads') }}
<p>Upload a letter and Notify will print, pack and post it for you.</p>
<a href="{{ url_for('.upload_letter', service_id=current_service.id) }}" class="button-secondary">Upload a letter</a>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,14 @@
{% extends "withnav_template.html" %}
{% from "components/page-header.html" import page_header %}
{% block service_page_title %}
{{ original_filename }}
{% endblock %}
{% block maincolumn_content %}
{{ page_header(
original_filename,
back_link=url_for('main.upload_letter', service_id=current_service.id)
) }}
{% endblock %}