From d6f012ee9e0106df05286d0deeff6c0a12de4af7 Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Tue, 6 Feb 2024 16:08:14 -0800 Subject: [PATCH] editing and creating new preview functions and backlinks --- app/assets/sass/uswds/_legacy-styles.scss | 4 +- app/main/views/send.py | 117 +++++++++++------- app/templates/views/check/ok.html | 41 +----- app/templates/views/check/preview.html | 38 ++---- app/templates/views/notifications/check.html | 11 +- .../views/notifications/preview.html | 65 ++++++++++ 6 files changed, 153 insertions(+), 123 deletions(-) create mode 100644 app/templates/views/notifications/preview.html diff --git a/app/assets/sass/uswds/_legacy-styles.scss b/app/assets/sass/uswds/_legacy-styles.scss index 3b09e2218..a4a6e3d2c 100644 --- a/app/assets/sass/uswds/_legacy-styles.scss +++ b/app/assets/sass/uswds/_legacy-styles.scss @@ -54,7 +54,7 @@ .sms-message-recipient { color: color('gray-cool-90'); - margin: 0 0 units(1); + margin: units(1) 0 units(1); } .sms-message-status { @@ -131,7 +131,7 @@ &-label, &-button-label { font-weight: bold; - font-size: 19px; + font-size: 19px; display: block; margin: 0 0 10px 0; } diff --git a/app/main/views/send.py b/app/main/views/send.py index 6c014b102..96389898b 100644 --- a/app/main/views/send.py +++ b/app/main/views/send.py @@ -527,11 +527,17 @@ def _check_messages(service_id, template_id, upload_id, preview_row): back_link = url_for( "main.send_one_off", service_id=service_id, template_id=template.id ) + back_link_from_preview = url_for( + "main.send_one_off", service_id=service_id, template_id=template.id + ) choose_time_form = None else: back_link = url_for( "main.send_messages", service_id=service_id, template_id=template.id ) + back_link_from_preview = url_for( + "main.check_messages", service_id=service_id, template_id=template.id, upload_id=upload_id + ) choose_time_form = ChooseTimeForm() if preview_row < 2: @@ -559,6 +565,7 @@ def _check_messages(service_id, template_id, upload_id, preview_row): remaining_messages=remaining_messages, choose_time_form=choose_time_form, back_link=back_link, + back_link_from_preview=back_link_from_preview, first_recipient_column=recipients.recipient_column_headers[0], preview_row=preview_row, sent_previously=job_api_client.has_sent_previously( @@ -612,6 +619,34 @@ def check_messages(service_id, template_id, upload_id, row_index=2): return render_template("views/check/ok.html", **data) +@main.route( + "/services///check//preview", + methods=["POST"], +) +@user_has_permissions("send_messages", restrict_admin_usage=True) +def preview_job(service_id, template_id, upload_id, row_index=2): + session['scheduled_for'] = request.form.get('scheduled_for', 'Not specified') + data = _check_messages(service_id, template_id, upload_id, row_index) + data["allowed_file_extensions"] = Spreadsheet.ALLOWED_FILE_EXTENSIONS + if ( + data["recipients"].too_many_rows + or not data["count_of_recipients"] + or not data["recipients"].has_recipient_columns + or data["recipients"].duplicate_recipient_column_headers + or data["recipients"].missing_column_headers + or data["sent_previously"] + ): + return render_template("views/check/column-errors.html", **data) + + if data["row_errors"]: + return render_template("views/check/row-errors.html", **data) + + if data["errors"]: + return render_template("views/check/column-errors.html", **data) + + return render_template('views/check/preview.html', scheduled_for=session['scheduled_for'], **data, +) + @main.route("/services//start-job/", methods=["POST"]) @user_has_permissions("send_messages", restrict_admin_usage=True) def start_job(service_id, upload_id): @@ -633,49 +668,6 @@ def start_job(service_id, upload_id): ) -@main.route( - "/services///check//preview", - methods=["POST"], -) -@user_has_permissions("send_messages", restrict_admin_usage=True) -def preview_job(service_id, template_id, upload_id, row_index=2): - # Store form data in session temporarily - session['scheduled_for'] = request.form.get('scheduled_for', 'Not specified') - # session.pop("sender_id", None) - data = _check_messages(service_id, template_id, upload_id, row_index) - data["allowed_file_extensions"] = Spreadsheet.ALLOWED_FILE_EXTENSIONS - - if ( - data["recipients"].too_many_rows - or not data["count_of_recipients"] - or not data["recipients"].has_recipient_columns - or data["recipients"].duplicate_recipient_column_headers - or data["recipients"].missing_column_headers - or data["sent_previously"] - ): - return render_template("views/check/column-errors.html", **data) - - if data["row_errors"]: - return render_template("views/check/row-errors.html", **data) - - if data["errors"]: - return render_template("views/check/column-errors.html", **data) - - metadata_kwargs = { - "notification_count": data["count_of_recipients"], - "template_id": template_id, - "valid": True, - "original_file_name": data.get("original_file_name", ""), - } - - if session.get("sender_id"): - metadata_kwargs["sender_id"] = session["sender_id"] - - set_metadata_on_csv_upload(service_id, upload_id, **metadata_kwargs) - - return render_template('views/check/preview.html', data=session['scheduled_for'], **data, metadata_kwargs=metadata_kwargs) - - def fields_to_fill_in(template, prefill_current_user=False): if not prefill_current_user: return first_column_headings[template.template_type] + list( @@ -721,7 +713,15 @@ def get_send_test_page_title(template_type, entering_recipient, name=None): return "Personalize this message" -def get_back_link(service_id, template, step_index, placeholders=None): +def get_back_link(service_id, template, step_index, placeholders=None, preview=False,): + if preview: + return url_for( + "main.check_notification", + service_id=service_id, + template_id=template.id, + ) + + if step_index == 0: if should_skip_template_page(template._template): return url_for( @@ -826,6 +826,8 @@ def _check_notification(service_id, template_id, exception=None): back_link = get_back_link(service_id, template, len(placeholders), placeholders) + back_link_from_preview = get_back_link(service_id, template, len(placeholders), placeholders, preview=True) + choose_time_form = ChooseTimeForm() if (not session.get("recipient")) or not all_placeholders_in_session( @@ -839,6 +841,7 @@ def _check_notification(service_id, template_id, exception=None): return dict( template=template, back_link=back_link, + back_link_from_preview=back_link_from_preview, choose_time_form=choose_time_form, **(get_template_error_dict(exception) if exception else {}), ) @@ -869,6 +872,29 @@ def get_template_error_dict(exception): "original_file_name": False, } +@main.route( + "/services//template//notification/check/preview", + methods=["POST"], +) +@user_has_permissions("send_messages", restrict_admin_usage=True) +def preview_notification(service_id, template_id): + recipient = get_recipient() + if not recipient: + return redirect( + url_for( + ".send_one_off", + service_id=service_id, + template_id=template_id, + ) + ) + + session['scheduled_for'] = request.form.get('scheduled_for', 'Not specified') + + return render_template( + "views/notifications/preview.html", + **_check_notification(service_id, template_id), data=session['scheduled_for'] + ) + @main.route( "/services//template//notification/check", @@ -876,6 +902,7 @@ def get_template_error_dict(exception): ) @user_has_permissions("send_messages", restrict_admin_usage=True) def send_notification(service_id, template_id): + scheduled_for = session.pop('scheduled_for', None) recipient = get_recipient() if not recipient: return redirect( @@ -910,7 +937,7 @@ def send_notification(service_id, template_id): job_api_client.create_job( upload_id, service_id, - scheduled_for=request.form.get("scheduled_for", ""), + scheduled_for=scheduled_for, template_id=template_id, original_file_name=filename, notification_count=1, diff --git a/app/templates/views/check/ok.html b/app/templates/views/check/ok.html index 6fc96f73b..f70b6232e 100644 --- a/app/templates/views/check/ok.html +++ b/app/templates/views/check/ok.html @@ -41,50 +41,11 @@

{{ original_file_name }}

{% endif %} {% set button_text %} - Preview send - + Preview {% endset %} {{ usaButton({ "text": button_text }) }} - - - {% endblock %} diff --git a/app/templates/views/check/preview.html b/app/templates/views/check/preview.html index 1c07bffc6..c7b303a8a 100644 --- a/app/templates/views/check/preview.html +++ b/app/templates/views/check/preview.html @@ -14,35 +14,23 @@ {% block backLink %} - {{ usaBackLink({ "href": back_link }) }} + {{ usaBackLink({ "href": back_link_from_preview }) }} {% endblock %} {% block maincolumn_content %} - {{ page_header('Send messages') }} + {{ page_header('Preview') }}

Message

- {% if data %} -

Time: {{data | format_datetime_short_america}}

+ {% if scheduled_for %} +

Time: {{scheduled_for}}

{% endif %} -

File: {{metadata_kwargs.original_file_name}}

+

File: {{original_file_name}}

{{ template|string }}
- - - - {% endblock %} diff --git a/app/templates/views/notifications/check.html b/app/templates/views/notifications/check.html index 5bc970f9b..fec77f779 100644 --- a/app/templates/views/notifications/check.html +++ b/app/templates/views/notifications/check.html @@ -40,17 +40,16 @@ {% endcall %} {% else %} - {{ page_header('Preview of ‘{}’'.format(template.name)) }} + {{ page_header('Select delivery time') }} {% endif %} {{ template|string }}
diff --git a/app/templates/views/notifications/preview.html b/app/templates/views/notifications/preview.html new file mode 100644 index 000000000..868caefd3 --- /dev/null +++ b/app/templates/views/notifications/preview.html @@ -0,0 +1,65 @@ +{% extends "withnav_template.html" %} +{% from "components/banner.html" import banner_wrapper %} +{% from "components/page-header.html" import page_header %} +{% from "components/components/back-link/macro.njk" import usaBackLink %} +{% from "components/components/button/macro.njk" import usaButton %} + +{% block service_page_title %} + {{ "Error" if error else "Preview of ‘{}’".format(template.name) }} +{% endblock %} + +{% block backLink %} + {{ usaBackLink({ "href": back_link_from_preview }) }} +{% endblock %} + +{% block maincolumn_content %} + {% if error == 'not-allowed-to-send-to' %} +
+ {% call banner_wrapper(type='dangerous') %} + {% with + count_of_recipients=1, + template_type_label=( + 'phone number' if template.template_type == 'sms' else 'email address' + ) + %} + {% include "partials/check/not-allowed-to-send-to.html" %} + {% endwith %} + {% endcall %} +
+ {% elif error == 'too-many-messages' %} +
+ {% call banner_wrapper(type='dangerous') %} + {% include "partials/check/too-many-messages.html" %} + {% endcall %} +
+ {% elif error == 'message-too-long' %} + {# the only row_errors we can get when sending one off messages is that the message is too long #} +
+ {% call banner_wrapper(type='dangerous') %} + {% include "partials/check/message-too-long.html" %} + {% endcall %} +
+ {% else %} + {{ page_header('Preview of ‘{}’'.format(template.name)) }} + {% endif %} + + {{ template|string }} + +
+ +
+ +{% endblock %}