mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-02-24 04:10:57 -05:00
Added a send button which only appears on the page if the query string indicates that the PDF is valid. Before actually sending, we check that the service has the right permissions and that the metadata for the letter confirms the letter is valid (because the query string can be changed).
132 lines
4.4 KiB
Python
132 lines
4.4 KiB
Python
from app.notify_client import NotifyAdminAPIClient, _attach_current_user
|
|
|
|
|
|
class NotificationApiClient(NotifyAdminAPIClient):
|
|
|
|
def get_notifications_for_service(
|
|
self,
|
|
service_id,
|
|
job_id=None,
|
|
template_type=None,
|
|
status=None,
|
|
page=None,
|
|
page_size=None,
|
|
count_pages=None,
|
|
limit_days=None,
|
|
include_jobs=None,
|
|
include_from_test_key=None,
|
|
format_for_csv=None,
|
|
to=None,
|
|
include_one_off=None,
|
|
):
|
|
# TODO: if "to" is included, this should be a POST
|
|
params = {
|
|
'page': page,
|
|
'page_size': page_size,
|
|
'template_type': template_type,
|
|
'status': status,
|
|
'include_jobs': include_jobs,
|
|
'include_from_test_key': include_from_test_key,
|
|
'format_for_csv': format_for_csv,
|
|
'to': to,
|
|
'include_one_off': include_one_off,
|
|
'count_pages': count_pages,
|
|
}
|
|
|
|
params = {k: v for k, v in params.items() if v is not None}
|
|
|
|
if job_id:
|
|
return self.get(
|
|
url='/service/{}/job/{}/notifications'.format(service_id, job_id),
|
|
params=params
|
|
)
|
|
else:
|
|
if limit_days is not None:
|
|
params['limit_days'] = limit_days
|
|
return self.get(
|
|
url='/service/{}/notifications'.format(service_id),
|
|
params=params
|
|
)
|
|
|
|
def send_notification(self, service_id, *, template_id, recipient, personalisation, sender_id):
|
|
data = {
|
|
'template_id': template_id,
|
|
'to': recipient,
|
|
'personalisation': personalisation,
|
|
}
|
|
if sender_id:
|
|
data['sender_id'] = sender_id
|
|
data = _attach_current_user(data)
|
|
return self.post(url='/service/{}/send-notification'.format(service_id), data=data)
|
|
|
|
def send_precompiled_letter(self, service_id, filename, file_id):
|
|
data = {
|
|
'filename': filename,
|
|
'file_id': file_id,
|
|
}
|
|
data = _attach_current_user(data)
|
|
return self.post(url='/service/{}/send-pdf-letter'.format(service_id), data=data)
|
|
|
|
def get_notification(self, service_id, notification_id):
|
|
return self.get(url='/service/{}/notifications/{}'.format(service_id, notification_id))
|
|
|
|
def get_api_notifications_for_service(self, service_id):
|
|
ret = self.get_notifications_for_service(
|
|
service_id,
|
|
include_jobs=False,
|
|
include_from_test_key=True,
|
|
include_one_off=False,
|
|
count_pages=False
|
|
)
|
|
return self.map_letters_to_accepted(ret)
|
|
|
|
@staticmethod
|
|
def map_letters_to_accepted(notifications):
|
|
for notification in notifications['notifications']:
|
|
if notification['notification_type'] == 'letter':
|
|
if notification['status'] in ('created', 'sending'):
|
|
notification['status'] = 'accepted'
|
|
|
|
if notification['status'] in ('delivered', 'returned-letter'):
|
|
notification['status'] = 'received'
|
|
return notifications
|
|
|
|
def get_notification_letter_preview(self, service_id, notification_id, file_type, page=None):
|
|
|
|
get_url = '/service/{}/template/preview/{}/{}{}'.format(
|
|
service_id,
|
|
notification_id,
|
|
file_type,
|
|
'?page={}'.format(page) if page else ''
|
|
)
|
|
|
|
return self.get(url=get_url)
|
|
|
|
def get_notification_letter_preview_with_overlay(self, service_id, notification_id, file_type, page=None):
|
|
get_url = '/service/{}/template/preview/{}/{}{}{}'.format(
|
|
service_id,
|
|
notification_id,
|
|
file_type,
|
|
'?overlay=1',
|
|
'&page={}'.format(page) if page else '',
|
|
)
|
|
|
|
return self.get(url=get_url)
|
|
|
|
def update_notification_to_cancelled(self, service_id, notification_id):
|
|
return self.post(
|
|
url='/service/{}/notifications/{}/cancel'.format(service_id, notification_id),
|
|
data={})
|
|
|
|
def get_notification_status_by_service(self, start_date, end_date):
|
|
return self.get(
|
|
url='service/monthly-data-by-service',
|
|
params={
|
|
'start_date': str(start_date),
|
|
'end_date': str(end_date),
|
|
}
|
|
)
|
|
|
|
|
|
notification_api_client = NotificationApiClient()
|