mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-15 07:18:58 -04:00
Merge pull request #1163 from alphagov/unified-template-page
Merge email, text message and letter templates pages
This commit is contained in:
@@ -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
|
||||
])
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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']
|
||||
)
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
21
app/templates/views/templates/add.html
Normal file
21
app/templates/views/templates/add.html
Normal 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 %}
|
||||
@@ -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>
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
Reference in New Issue
Block a user