diff --git a/app/main/forms.py b/app/main/forms.py index ca271dc2b..6e469be2b 100644 --- a/app/main/forms.py +++ b/app/main/forms.py @@ -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 + ]) diff --git a/app/main/views/send.py b/app/main/views/send.py index 5a47a8173..971e6c433 100644 --- a/app/main/views/send.py +++ b/app/main/views/send.py @@ -82,35 +82,6 @@ def get_example_letter_address(key): }.get(key, '') -@main.route("/services//send/", 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//send//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) diff --git a/app/main/views/templates.py b/app/main/views/templates.py index cd6699d3b..a261401ab 100644 --- a/app/main/views/templates.py +++ b/app/main/views/templates.py @@ -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//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//templates/") @login_required @user_has_permissions( @@ -139,6 +165,25 @@ def view_template_version_as_png(service_id, template_id, version): )) +@main.route("/services//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//templates/add-", 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'] + ) diff --git a/app/templates/main_nav.html b/app/templates/main_nav.html index 08975d1de..2dc588d0e 100644 --- a/app/templates/main_nav.html +++ b/app/templates/main_nav.html @@ -45,11 +45,7 @@
  • Dashboard
  • {% if current_user.has_permissions(['view_activity', 'manage_templates', 'manage_api_keys'], admin_override=True, any_=True) %} -
  • Email templates
  • -
  • Text message templates
  • - {% if current_service.can_send_letters %} -
  • Letter templates
  • - {% endif %} +
  • Templates
  • {% endif %} {% if current_user.has_permissions(['manage_users', 'manage_settings'], admin_override=True) %}
  • Team members
  • diff --git a/app/templates/views/dashboard/write-first-messages.html b/app/templates/views/dashboard/write-first-messages.html index ecf754b33..5cf6ae03d 100644 --- a/app/templates/views/dashboard/write-first-messages.html +++ b/app/templates/views/dashboard/write-first-messages.html @@ -1,10 +1,11 @@

    Get started

    -