mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-14 10:58:58 -04:00
Staying on the edit page is atypical behaviour for an edit form, especially now it no longer shows the version history.
95 lines
3.4 KiB
Python
95 lines
3.4 KiB
Python
from datetime import datetime
|
|
from operator import itemgetter
|
|
|
|
from flask import abort, render_template, url_for
|
|
from werkzeug.utils import redirect
|
|
|
|
from app import provider_client
|
|
from app.main import main
|
|
from app.main.forms import AdminProviderForm, AdminProviderRatioForm
|
|
from app.utils.user import user_is_platform_admin
|
|
|
|
PROVIDER_PRIORITY_MEANING_SWITCHOVER = datetime(2019, 11, 29, 11, 0).isoformat()
|
|
|
|
|
|
@main.route("/providers")
|
|
@user_is_platform_admin
|
|
def view_providers():
|
|
providers = provider_client.get_all_providers()['provider_details']
|
|
domestic_email_providers, domestic_sms_providers, intl_sms_providers = [], [], []
|
|
for provider in providers:
|
|
if provider['notification_type'] == 'sms':
|
|
domestic_sms_providers.append(provider)
|
|
if provider.get('supports_international', None):
|
|
intl_sms_providers.append(provider)
|
|
elif provider['notification_type'] == 'email':
|
|
domestic_email_providers.append(provider)
|
|
|
|
add_monthly_traffic(domestic_sms_providers)
|
|
|
|
return render_template(
|
|
'views/providers/providers.html',
|
|
email_providers=domestic_email_providers,
|
|
domestic_sms_providers=domestic_sms_providers,
|
|
intl_sms_providers=intl_sms_providers
|
|
)
|
|
|
|
|
|
def add_monthly_traffic(domestic_sms_providers):
|
|
total_sms_sent = sum(provider['current_month_billable_sms'] for provider in domestic_sms_providers)
|
|
|
|
for provider in domestic_sms_providers:
|
|
percentage = (provider['current_month_billable_sms'] / total_sms_sent * 100) if total_sms_sent else 0
|
|
provider['monthly_traffic'] = round(percentage)
|
|
|
|
|
|
@main.route("/provider/<uuid:provider_id>/edit", methods=['GET', 'POST'])
|
|
@user_is_platform_admin
|
|
def edit_provider(provider_id):
|
|
provider = provider_client.get_provider_by_id(provider_id)['provider_details']
|
|
form = AdminProviderForm(active=provider['active'], priority=provider['priority'])
|
|
|
|
if form.validate_on_submit():
|
|
provider_client.update_provider(provider_id, form.priority.data)
|
|
return redirect(url_for('.view_providers'))
|
|
|
|
return render_template('views/providers/edit-provider.html', form=form, provider=provider)
|
|
|
|
|
|
@main.route("/provider/edit-sms-provider-ratio", methods=['GET', 'POST'])
|
|
@user_is_platform_admin
|
|
def edit_sms_provider_ratio():
|
|
|
|
providers = sorted([
|
|
provider
|
|
for provider in provider_client.get_all_providers()['provider_details']
|
|
if provider['notification_type'] == 'sms'
|
|
and provider['active']
|
|
], key=itemgetter('identifier'))
|
|
|
|
form = AdminProviderRatioForm(ratio=providers[0]['priority'])
|
|
|
|
if len(providers) < 2:
|
|
abort(400)
|
|
|
|
first_provider, second_provider = providers[0:2]
|
|
|
|
if form.validate_on_submit():
|
|
provider_client.update_provider(first_provider['id'], form.percentage_left)
|
|
provider_client.update_provider(second_provider['id'], form.percentage_right)
|
|
return redirect(url_for('.view_providers'))
|
|
|
|
return render_template(
|
|
'views/providers/edit-sms-provider-ratio.html',
|
|
form=form,
|
|
first_provider=providers[0]['display_name'],
|
|
second_provider=providers[1]['display_name'],
|
|
)
|
|
|
|
|
|
@main.route("/provider/<uuid:provider_id>")
|
|
@user_is_platform_admin
|
|
def view_provider(provider_id):
|
|
versions = provider_client.get_provider_versions(provider_id)
|
|
return render_template('views/providers/provider.html', provider_versions=versions['data'])
|