Merge pull request #1603 from alphagov/sms-sender-for-one-off

Select text message sender for one off notifications
This commit is contained in:
Rebecca Law
2017-11-02 16:35:51 +00:00
committed by GitHub
7 changed files with 208 additions and 19 deletions

View File

@@ -178,7 +178,7 @@ def set_sender(service_id, template_id):
template = service_api_client.get_service_template(service_id, template_id)['data']
if template['template_type'] != 'email':
if template['template_type'] == 'letter':
return redirect_to_one_off
sender_details = get_sender_details(service_id, template['template_type'])
@@ -192,7 +192,12 @@ def set_sender(service_id, template_id):
sender_choices=sender_context['value_and_label'],
sender_label=sender_context['description']
)
option_hints = {sender_context['default_id']: 'Default'}
option_hints = {sender_context['default_id']: '(Default)',
}
if sender_context.get('receives_text_message', None):
option_hints.update({sender_context['receives_text_message']: '(Receives replies)'})
if sender_context.get('default_and_receives', None):
option_hints = {sender_context['default_and_receives']: '(Default and receives replies)'}
if form.validate_on_submit():
session['sender_id'] = form.sender.data
@@ -220,12 +225,24 @@ def get_sender_context(sender_details, template_type):
'title': 'Choose sender address',
'description': 'Select an address that recipients can reply to',
'field_name': 'contact_block'
},
'sms': {
'title': 'Chose text message sender',
'description': 'Select a text message sender that the recipients can reply to',
'field_name': 'sms_sender'
}
}[template_type]
sender_format = context['field_name']
context['default_id'] = next(sender['id'] for sender in sender_details if sender['is_default'])
if template_type == 'sms':
inbound = [sender['id'] for sender in sender_details if sender['inbound_number_id']]
if inbound:
context['receives_text_message'] = next(iter(inbound))
if context['default_id'] == context.get('receives_text_message', None):
context['default_and_receives'] = context['default_id']
context['value_and_label'] = [(sender['id'], sender[sender_format]) for sender in sender_details]
return context
@@ -233,7 +250,8 @@ def get_sender_context(sender_details, template_type):
def get_sender_details(service_id, template_type):
api_call = {
'email': service_api_client.get_reply_to_email_addresses,
'letter': service_api_client.get_letter_contacts
'letter': service_api_client.get_letter_contacts,
'sms': service_api_client.get_sms_senders
}[template_type]
return api_call(service_id)
@@ -248,7 +266,7 @@ def send_test(service_id, template_id):
session['send_test_letter_page_count'] = None
db_template = service_api_client.get_service_template(service_id, template_id)['data']
if db_template['template_type'] != 'email':
if db_template['template_type'] == 'letter':
session['sender_id'] = None
if email_or_sms_not_enabled(db_template['template_type'], current_service['permissions']):
@@ -311,7 +329,12 @@ def send_test_step(service_id, template_id, step_index):
if not session.get('send_test_letter_page_count'):
session['send_test_letter_page_count'] = get_page_count_for_letter(db_template)
email_reply_to = None
sms_sender = None
if db_template['template_type'] == 'email':
email_reply_to = get_email_reply_to_address_from_session(service_id)
elif db_template['template_type'] == 'sms':
sms_sender = get_sms_sender_from_session(service_id)
template = get_template(
db_template,
current_service,
@@ -324,7 +347,8 @@ def send_test_step(service_id, template_id, step_index):
filetype='png',
),
page_count=session['send_test_letter_page_count'],
email_reply_to=get_email_reply_to_address_from_session(service_id),
email_reply_to=email_reply_to,
sms_sender=sms_sender
)
placeholders = fields_to_fill_in(
@@ -449,6 +473,12 @@ def _check_messages(service_id, template_type, upload_id, letters_as_pdf=False):
remaining_messages = (current_service['message_limit'] - sum(stat['requested'] for stat in statistics.values()))
contents = s3download(service_id, upload_id)
email_reply_to = None
sms_sender = None
if template_type == 'email':
email_reply_to = get_email_reply_to_address_from_session(service_id)
elif template_type == 'sms':
sms_sender = get_sms_sender_from_session(service_id)
template = get_template(
service_api_client.get_service_template(
service_id,
@@ -463,7 +493,8 @@ def _check_messages(service_id, template_type, upload_id, letters_as_pdf=False):
upload_id=upload_id,
filetype='png',
) if not letters_as_pdf else None,
email_reply_to=get_email_reply_to_address_from_session(service_id),
email_reply_to=email_reply_to,
sms_sender=sms_sender
)
recipients = RecipientCSV(
contents,
@@ -723,12 +754,18 @@ def check_notification(service_id, template_id):
def _check_notification(service_id, template_id, exception=None):
db_template = service_api_client.get_service_template(service_id, template_id)['data']
email_reply_to = None
sms_sender = None
if db_template['template_type'] == 'email':
email_reply_to = get_email_reply_to_address_from_session(service_id)
elif db_template['template_type'] == 'sms':
sms_sender = get_sms_sender_from_session(service_id)
template = get_template(
db_template,
current_service,
show_recipient=True,
email_reply_to=get_email_reply_to_address_from_session(service_id),
email_reply_to=email_reply_to,
sms_sender=sms_sender
)
# go back to start of process
@@ -814,3 +851,10 @@ def get_email_reply_to_address_from_session(service_id):
return service_api_client.get_reply_to_email_address(
service_id, session['sender_id']
)['email_address']
def get_sms_sender_from_session(service_id):
if session.get('sender_id'):
return service_api_client.get_sms_sender(
service_id=service_id, sms_sender_id=session['sender_id']
)['sms_sender']

View File

@@ -590,7 +590,7 @@ def service_sms_senders(service_id):
if sender['is_default']:
hints += ["default"]
if sender['inbound_number_id']:
hints += ["recieves replies"]
hints += ["receives replies"]
if hints:
sender['hint'] = "(" + " and ".join(hints) + ")"

View File

@@ -272,6 +272,7 @@ def get_template(
page_count=1,
redact_missing_personalisation=False,
email_reply_to=None,
sms_sender=None
):
if 'email' == template['template_type']:
return EmailPreviewTemplate(
@@ -287,7 +288,7 @@ def get_template(
return SMSPreviewTemplate(
template,
prefix=service['name'],
sender=(service['sms_sender'] not in {'GOVUK', None}),
sender=sms_sender if sms_sender else (service['sms_sender'] not in {'GOVUK', None}),
show_recipient=show_recipient,
redact_missing_personalisation=redact_missing_personalisation,
)