Skip to content

Commit 1e8fc83

Browse files
committed
feat: O15a -> O16 Add recipients
- When user click I'll do this later, we route to Add recipients page - Three options are available - 1) Upload list of email addresses (goes to csv upload page) - 2) Enter a single email address (goes to Send "x" page) - 3) Use my email address (does to Personalise page)
1 parent c12334a commit 1e8fc83

File tree

7 files changed

+138
-8
lines changed

7 files changed

+138
-8
lines changed

app/main/forms.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from numbers import Number
99

1010
import pytz
11-
from flask import request
11+
from flask import request, session
1212
from flask_login import current_user
1313
from flask_wtf import FlaskForm as Form
1414
from flask_wtf.file import FileAllowed, FileSize
@@ -2359,20 +2359,32 @@ def get_placeholder_form_instance(
23592359
allow_international_phone_numbers=False,
23602360
allow_sms_to_uk_landline=False,
23612361
):
2362-
if InsensitiveDict.make_key(placeholder_name) == "emailaddress" and template_type == "email":
2362+
placeholder_key = InsensitiveDict.make_key(placeholder_name)
2363+
2364+
if placeholder_key == "emailaddress" and template_type == "email":
2365+
default_value = dict_to_populate_from.get(placeholder_name)
2366+
if not default_value:
2367+
if (
2368+
session.get("source_call") == "add_recipients"
2369+
and session.get("add_recipients_choice") == "use_my_email"
2370+
):
2371+
default_value = current_user.email_address
23632372
field = make_email_address_field(label=placeholder_name, gov_user=False, thing="an email address")
2364-
elif InsensitiveDict.make_key(placeholder_name) == "phonenumber" and template_type == "sms":
2373+
2374+
elif placeholder_key == "phonenumber" and template_type == "sms":
2375+
default_value = dict_to_populate_from.get(placeholder_name, "")
23652376
field = valid_phone_number(
23662377
label=placeholder_name,
23672378
international=allow_international_phone_numbers,
23682379
sms_to_uk_landline=allow_sms_to_uk_landline,
23692380
)
2381+
23702382
else:
2383+
default_value = dict_to_populate_from.get(placeholder_name, "")
23712384
field = GovukTextInputField(placeholder_name, validators=[DataRequired(message="Cannot be empty")])
23722385

23732386
PlaceholderForm.placeholder_value = field
2374-
2375-
return PlaceholderForm(placeholder_value=dict_to_populate_from.get(placeholder_name, ""))
2387+
return PlaceholderForm(placeholder_value=default_value)
23762388

23772389

23782390
class AddRecipientForm(StripWhitespaceForm):

app/main/views/send.py

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
)
3232
from app.main import main, no_cookie
3333
from app.main.forms import (
34+
AddRecipientForm,
3435
ChooseTimeForm,
3536
CsvUploadForm,
3637
LetterAddressForm,
@@ -101,6 +102,9 @@ def send_messages(service_id, template_id):
101102
),
102103
)
103104

105+
if session["source_call"] == "add_recipients":
106+
backlink = url_for(".add_recipients", service_id=service_id, template_id=template_id, back="email_reply_to")
107+
104108
if template.template_type == "email":
105109
template.reply_to = get_email_reply_to_address_from_session()
106110
elif template.template_type == "sms":
@@ -162,6 +166,7 @@ def send_messages(service_id, template_id):
162166
form=form,
163167
allowed_file_extensions=Spreadsheet.ALLOWED_FILE_EXTENSIONS,
164168
error_summary_enabled=True,
169+
alternative_backlink=backlink,
165170
)
166171

167172

@@ -408,6 +413,44 @@ def send_one_off_letter_address(service_id, template_id):
408413
)
409414

410415

416+
@main.route("/services/<uuid:service_id>/send/<uuid:template_id>/add-recipients", methods=["GET", "POST"])
417+
@user_has_permissions("send_messages")
418+
def add_recipients(service_id, template_id):
419+
session["source_call"] = ""
420+
421+
form = AddRecipientForm()
422+
back = request.args.get("back")
423+
424+
backlink = None
425+
426+
if back == "email_reply_to" and template_id:
427+
backlink = url_for(
428+
"main.service_email_reply_to", service_id=service_id, template_id=template_id, back="from_name"
429+
)
430+
431+
if form.validate_on_submit():
432+
choice = form.add_recipient_method.data
433+
session["source_call"] = "add_recipients"
434+
session["add_recipients_choice"] = choice
435+
436+
if choice == "upload_csv":
437+
return redirect(url_for("main.send_messages", service_id=service_id, template_id=template_id))
438+
elif choice == "enter_single":
439+
return redirect(
440+
url_for("main.send_one_off_step", service_id=service_id, template_id=template_id, step_index=0)
441+
)
442+
elif choice == "use_my_email":
443+
return redirect(url_for("main.send_one_off_to_myself", service_id=service_id, template_id=template_id))
444+
445+
return render_template(
446+
"views/add-recipients.html",
447+
form=form,
448+
template_id=template_id,
449+
service_id=service_id,
450+
alternative_backlink=backlink,
451+
)
452+
453+
411454
@main.route(
412455
"/services/<uuid:service_id>/send/<uuid:template_id>/one-off/step-<int:step_index>",
413456
methods=["GET", "POST"],
@@ -536,6 +579,7 @@ def send_one_off_step(service_id, template_id, step_index): # noqa: C901
536579
back_link=back_link,
537580
link_to_upload=(request.endpoint == "main.send_one_off_step" and step_index == 0),
538581
error_summary_enabled=True,
582+
hide_upload_links=session.get("source_call") == "add_recipients",
539583
)
540584

541585

@@ -873,6 +917,9 @@ def _get_set_sender_back_link(service_id, template):
873917

874918
def get_back_link(service_id, template, step_index, placeholders=None):
875919
if step_index == 0:
920+
if session.get("source_call") == "add_recipients":
921+
return url_for(".add_recipients", service_id=service_id, template_id=template.id, back="email_reply_to")
922+
876923
if _should_show_set_sender_page(service_id, template):
877924
return url_for("main.set_sender", service_id=service_id, template_id=template.id, from_back_link="yes")
878925
else:
@@ -978,7 +1025,10 @@ def _check_notification(service_id, template_id, exception=None):
9781025

9791026
placeholders = fields_to_fill_in(template)
9801027

981-
back_link = get_back_link(service_id, template, len(placeholders), placeholders)
1028+
if request.args.get("back") == "add_recipients":
1029+
back_link = url_for(".add_recipients", service_id=service_id, template_id=template.id, back="email_reply_to")
1030+
else:
1031+
back_link = get_back_link(service_id, template, len(placeholders), placeholders)
9821032

9831033
if (not session.get("recipient") and template.template_type != "letter") or not all_placeholders_in_session(
9841034
template.placeholders
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
{% extends "withnav_template.html" %}
2+
{% from "components/page-header.html" import page_header %}
3+
{% from "components/form.html" import form_wrapper %}
4+
{% from "components/page-footer.html" import page_footer %}
5+
{% from "govuk_frontend_jinja/components/back-link/macro.html" import govukBackLink %}
6+
7+
{% set heading = 'Add recipients' %}
8+
9+
{% block service_page_title %}
10+
{{ heading }}
11+
{% endblock %}
12+
13+
{% block backLink %}
14+
{{ govukBackLink({ "href": alternative_backlink or url_for('main.view_template', service_id=service_id, template_id=template_id) }) }}
15+
{% endblock %}
16+
17+
{% block maincolumn_content %}
18+
<div class="govuk-grid-row">
19+
<div class="govuk-grid-column-five-sixths">
20+
{{ page_header(heading) }}
21+
22+
<p class="govuk-body">Choose how you want to add recipients:</p>
23+
24+
{% call form_wrapper() %}
25+
{{ form.add_recipient_method(param_extensions={
26+
"fieldset": {
27+
"legend": {
28+
"classes": "",
29+
}
30+
},
31+
"items": [
32+
{"value": "upload_csv"},
33+
{"value": "enter_single"},
34+
{"value": "use_my_email"}
35+
]
36+
}) }}
37+
38+
{% if current_service.trial_mode %}
39+
<div class="govuk-inset-text">
40+
<p>Your service is in test mode. You can only:</p>
41+
42+
<ul class="govuk-list govuk-list--bullet">
43+
<li>send 50 emails per day</li>
44+
<li>send test emails to yourself and your team members</li>
45+
</ul>
46+
<p>
47+
To lift these restrictions,
48+
<a class="govuk-link govuk-link--no-visited-state" href="{{ url_for('main.request_to_go_live', service_id=service_id) }}">
49+
make your service live
50+
</a>
51+
</p>
52+
</div>
53+
{% endif %}
54+
55+
{{ page_footer('Continue') }}
56+
{% endcall %}
57+
</div>
58+
</div>
59+
{% endblock %}

app/templates/views/request-to-go-live.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,19 @@
33
{% from "components/page-header.html" import page_header %}
44
{% from "components/page-footer.html" import page_footer %}
55
{% from "govuk_frontend_jinja/components/task-list/macro.html" import govukTaskList %}
6+
{% from "govuk_frontend_jinja/components/back-link/macro.html" import govukBackLink %}
7+
68

79
{% block service_page_title %}
810
Make your service live
911
{% endblock %}
1012

13+
{% block backLink %}
14+
{% if alternative_backlink %}
15+
{{ govukBackLink({ "href": alternative_backlink }) }}
16+
{% endif %}
17+
{% endblock %}
18+
1119
{% block maincolumn_content %}
1220
{# as options objects are different for completed vs not completed #}
1321
{# we set them here to reuse them later #}

app/templates/views/send-test.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<div class="govuk-grid-column-full {% if form.placeholder_value.label.text == 'phone number' %}extra-tracking{% endif %}">
2626
{{ form.placeholder_value(param_extensions={"classes": "govuk-!-width-full"}) }}
2727
</div>
28-
{% if skip_link or link_to_upload %}
28+
{% if not hide_upload_links and (skip_link or link_to_upload) %}
2929
<div class="govuk-grid-column-full">
3030
{% if link_to_upload %}
3131
<a class="govuk-link govuk-link--no-visited-state govuk-!-margin-right-3" href="{{ url_for('main.send_messages', service_id=current_service.id, template_id=template.id) }}">Upload a list of {{ 999|recipient_count_label(template.template_type) }}</a>

app/templates/views/send.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111

1212
{% block backLink %}
13-
{{ govukBackLink({ "href": url_for('main.send_one_off', service_id=current_service.id, template_id=template.id) }) }}
13+
{{ govukBackLink({ "href": alternative_backlink or url_for('main.send_one_off', service_id=current_service.id, template_id=template.id) }) }}
1414
{% endblock %}
1515

1616
{% block maincolumn_content %}

tests/route-list.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@
287287
"/services/<uuid:service_id>/template-usage",
288288
"/services/<uuid:service_id>/template/<uuid:template_id>/notification/check",
289289
"/services/<uuid:service_id>/template/<uuid:template_id>/one-off/send-to-myself",
290+
"/services/<uuid:service_id>/send/<uuid:template_id>/add-recipients",
290291
"/services/<uuid:service_id>/templates",
291292
"/services/<uuid:service_id>/templates/<template_type:template_type>",
292293
"/services/<uuid:service_id>/templates/<template_type:template_type>/folders/<uuid:template_folder_id>",

0 commit comments

Comments
 (0)