Merge pull request #1163 from alphagov/unified-template-page

Merge email, text message and letter templates pages
This commit is contained in:
Chris Hill-Scott
2017-03-06 10:42:08 +00:00
committed by GitHub
15 changed files with 168 additions and 143 deletions

View File

@@ -558,3 +558,23 @@ class DateFilterForm(Form):
start_date = DateField("Start Date", [validators.optional()])
end_date = DateField("End Date", [validators.optional()])
include_from_test_key = BooleanField("Include test keys", default="checked", false_values={"N"})
class ChooseTemplateType(Form):
template_type = RadioField(
'What kind of template do you want to add?',
validators=[
DataRequired()
]
)
def __init__(self, include_letters=False, *args, **kwargs):
super().__init__(*args, **kwargs)
self.template_type.choices = filter(None, [
('email', 'Email'),
('sms', 'Text message'),
('letter', 'Letter') if include_letters else None
])

View File

@@ -82,35 +82,6 @@ def get_example_letter_address(key):
}.get(key, '')
@main.route("/services/<service_id>/send/<template_type>", methods=['GET'])
@login_required
@user_has_permissions('view_activity',
'send_texts',
'send_emails',
'manage_templates',
'manage_api_keys',
admin_override=True, any_=True)
def choose_template(service_id, template_type):
if template_type not in ['email', 'sms', 'letter']:
abort(404)
if not current_service['can_send_letters'] and template_type == 'letter':
abort(403)
return render_template(
'views/templates/choose.html',
templates=[
get_template(
template,
current_service,
letter_preview_url=url_for('.view_template', service_id=service_id, template_id=template['id']),
)
for template in service_api_client.get_service_templates(service_id)['data']
if template['template_type'] == template_type
],
template_type=template_type,
page_heading=get_page_headings(template_type)
)
@main.route("/services/<service_id>/send/<template_id>/csv", methods=['GET', 'POST'])
@login_required
@user_has_permissions('send_texts', 'send_emails', 'send_letters')
@@ -285,7 +256,7 @@ def _check_messages(service_id, template_type, upload_id, letters_as_pdf=False):
)
else:
back_link = url_for(
'.choose_template', service_id=service_id, template_type=template.template_type, **extra_args
'.choose_template', service_id=service_id, **extra_args
)
choose_time_form = None
else:
@@ -359,7 +330,7 @@ def check_messages_as_png(service_id, template_type, upload_id):
def recheck_messages(service_id, template_type, upload_id):
if not session.get('upload_data'):
return redirect(url_for('main.choose_template', service_id=service_id, template_type=template_type))
return redirect(url_for('main.choose_template', service_id=service_id))
return send_messages(service_id, session['upload_data'].get('template_id'))
@@ -412,4 +383,4 @@ def get_check_messages_back_url(service_id, template_type):
if len(templates) == 1:
return url_for('.send_test', service_id=service_id, template_id=templates[0]['id'], help=1)
return url_for('main.choose_template', service_id=service_id, template_type=template_type)
return url_for('main.choose_template', service_id=service_id)

View File

@@ -12,7 +12,7 @@ from notifications_python_client.errors import HTTPError
from app.main import main
from app.utils import user_has_permissions, get_template, png_from_pdf
from app.main.forms import SMSTemplateForm, EmailTemplateForm, LetterTemplateForm
from app.main.forms import ChooseTemplateType, SMSTemplateForm, EmailTemplateForm, LetterTemplateForm
from app.main.views.send import get_example_csv_rows
from app import service_api_client, current_service, template_statistics_client
@@ -29,6 +29,32 @@ page_headings = {
}
@main.route("/services/<service_id>/templates", methods=['GET'])
@login_required
@user_has_permissions(
'view_activity',
'send_texts',
'send_emails',
'manage_templates',
'manage_api_keys',
admin_override=True,
any_=True,
)
def choose_template(service_id):
return render_template(
'views/templates/choose.html',
templates=[
get_template(
template,
current_service,
letter_preview_url=url_for('.view_template', service_id=service_id, template_id=template['id']),
)
for template in service_api_client.get_service_templates(service_id)['data']
if should_show_template(template['template_type'])
],
)
@main.route("/services/<service_id>/templates/<template_id>")
@login_required
@user_has_permissions(
@@ -139,6 +165,25 @@ def view_template_version_as_png(service_id, template_id, version):
))
@main.route("/services/<service_id>/templates/add", methods=['GET', 'POST'])
@login_required
@user_has_permissions('manage_templates', admin_override=True)
def add_template_by_type(service_id):
form = ChooseTemplateType(
include_letters=current_service['can_send_letters']
)
if form.validate_on_submit():
return redirect(url_for(
'.add_service_template',
service_id=service_id,
template_type=form.template_type.data,
))
return render_template('views/templates/add.html', form=form)
@main.route("/services/<service_id>/templates/add-<template_type>", methods=['GET', 'POST'])
@login_required
@user_has_permissions('manage_templates', admin_override=True)
@@ -173,7 +218,7 @@ def add_service_template(service_id, template_type):
raise e
else:
return redirect(
url_for('.choose_template', service_id=service_id, template_type=template_type)
url_for('.choose_template', service_id=service_id)
)
return render_template(
@@ -362,3 +407,10 @@ def get_human_readable_delta(from_time, until_time):
else:
days = delta.days
return '{} day{}'.format(days, '' if days == 1 else 's')
def should_show_template(template_type):
return (
template_type != 'letter' or
current_service['can_send_letters']
)

View File

@@ -45,11 +45,7 @@
<ul>
<li><a href="{{ url_for('.service_dashboard', service_id=current_service.id) }}">Dashboard</a></li>
{% if current_user.has_permissions(['view_activity', 'manage_templates', 'manage_api_keys'], admin_override=True, any_=True) %}
<li><a href="{{ url_for('.choose_template', service_id=current_service.id, template_type='email') }}">Email templates</a></li>
<li><a href="{{ url_for('.choose_template', service_id=current_service.id, template_type='sms') }}">Text message templates</a></li>
{% if current_service.can_send_letters %}
<li><a href="{{ url_for('.choose_template', service_id=current_service.id, template_type='letter') }}">Letter templates</a></li>
{% endif %}
<li><a href="{{ url_for('.choose_template', service_id=current_service.id) }}">Templates</a></li>
{% endif %}
{% if current_user.has_permissions(['manage_users', 'manage_settings'], admin_override=True) %}
<li><a href="{{ url_for('.manage_users', service_id=current_service.id) }}">Team members</a></li>

View File

@@ -1,10 +1,11 @@
<h2 class="heading-medium">Get started</h2>
<nav class="grid-row">
<div class="column-half">
<a class="pill-separate-item" href="{{ url_for('.choose_template', service_id=current_service.id, template_type='email') }}">Write an email</a>
</div>
<div class="column-half">
<a class="pill-separate-item" href="{{ url_for('.choose_template', service_id=current_service.id, template_type='sms') }}">Write a text message</a>
</div>
<nav>
<a class="pill-separate-item" href="{{ url_for('.choose_template', service_id=current_service.id) }}">
{% if current_service.can_send_letters %}
Write an email, text message or letter
{% else %}
Write an email or text message
{% endif %}
</a>
</nav>

View File

@@ -0,0 +1,21 @@
{% from "components/radios.html" import radios %}
{% from "components/page-footer.html" import page_footer %}
{% extends "withnav_template.html" %}
{% block service_page_title %}
Add new template
{% endblock %}
{% block maincolumn_content %}
<h1 class="heading-large">Add new template</h1>
<form method="post">
{{ radios(form.template_type) }}
{{ page_footer(
'Next'
) }}
</form>
{% endblock %}

View File

@@ -1,34 +1,45 @@
{% extends "withnav_template.html" %}
{% block service_page_title %}
{{ page_heading }}
Templates
{% endblock %}
{% block maincolumn_content %}
{% if not templates %}
<h1 class="heading-large">{{ page_heading }}</h1>
<h1 class="heading-large">Templates</h1>
{% if current_user.has_permissions(permissions=['manage_templates'], any_=True) %}
<p class="bottom-gutter">
You need a template before you can send
{{ 'emails' if 'email' == template_type else 'text messages' }}
{% if current_service.can_send_letters %}
emails, text messages or letters
{%- else -%}
emails or text messages
{%- endif %}.
</p>
<a href="{{ url_for('.add_service_template', service_id=current_service.id, template_type=template_type) }}" class="button">Add a new template</a>
<a href="{{ url_for('.add_template_by_type', service_id=current_service.id) }}" class="button">Add a new template</a>
{% else %}
<p>You need to ask your service manager to add templates before you can send messages</p>
<p>
You need to ask your service manager to add templates before you can send
{% if current_service.can_send_letters %}
emails, text messages or letters
{%- else -%}
emails or text messages
{%- endif %}.
</p>
{% endif %}
{% else %}
<div class="grid-row">
<div class="column-two-thirds">
<h1 class="heading-large">{{ page_heading }}</h1>
<h1 class="heading-large">Templates</h1>
</div>
{% if current_user.has_permissions(permissions=['manage_templates'], admin_override=True) %}
<div class="column-one-third">
<a href="{{ url_for('.add_service_template', service_id=current_service.id, template_type=template_type) }}" class="button align-with-heading">Add new template</a>
<a href="{{ url_for('.add_template_by_type', service_id=current_service.id) }}" class="button align-with-heading">Add new template</a>
</div>
{% endif %}
</div>

View File

@@ -14,6 +14,6 @@
{% endfor %}
</div>
<p>
<a href="{{ url_for(".choose_template", service_id=current_service.id, template_type=versions[0].template_type) }}">Back to current templates</a>
<a href="{{ url_for(".choose_template", service_id=current_service.id) }}">Back to current templates</a>
</p>
{% endblock %}

View File

@@ -18,10 +18,8 @@
</div>
{{ page_footer(
secondary_link=url_for('.choose_template', service_id=current_service.id, template_type=template.template_type),
secondary_link_text='All {} templates'.format(
'email' if 'email' == template.template_type else 'text message' if 'sms' == template.template_type else 'letter'
)
secondary_link=url_for('.choose_template', service_id=current_service.id),
secondary_link_text='All templates'
) }}
{% endblock %}