diff --git a/app/main/forms.py b/app/main/forms.py index feaecb3f6..74f956125 100644 --- a/app/main/forms.py +++ b/app/main/forms.py @@ -1686,7 +1686,7 @@ class EditNotesForm(StripWhitespaceForm): notes = TextAreaField(validators=[]) -class ServiceBillingDetailsForm(StripWhitespaceForm): +class BillingDetailsForm(StripWhitespaceForm): billing_contact_email_addresses = GovukTextInputField('Contact email addresses') billing_contact_names = GovukTextInputField('Contact names') billing_reference = GovukTextInputField('Reference') diff --git a/app/main/views/organisations.py b/app/main/views/organisations.py index 02b8c4491..b8131daee 100644 --- a/app/main/views/organisations.py +++ b/app/main/views/organisations.py @@ -19,6 +19,7 @@ from app.main import main from app.main.forms import ( AddGPOrganisationForm, AddNHSLocalOrganisationForm, + BillingDetailsForm, ConfirmPasswordForm, EditNotesForm, GoLiveNotesForm, @@ -558,4 +559,25 @@ def edit_organisation_notes(org_id): @main.route("/organisations//settings/edit-billing-details", methods=['GET', 'POST']) @user_is_platform_admin def edit_organisation_billing_details(org_id): - pass + form = BillingDetailsForm( + billing_contact_email_addresses=current_organisation.billing_contact_email_addresses, + billing_contact_names=current_organisation.billing_contact_names, + billing_reference=current_organisation.billing_reference, + purchase_order_number=current_organisation.purchase_order_number, + notes=current_organisation.notes, + ) + + if form.validate_on_submit(): + current_organisation.update( + billing_contact_email_addresses=form.billing_contact_email_addresses.data, + billing_contact_names=form.billing_contact_names.data, + billing_reference=form.billing_reference.data, + purchase_order_number=form.purchase_order_number.data, + notes=form.notes.data, + ) + return redirect(url_for('.organisation_settings', organisation_id=org_id)) + + return render_template( + 'views/organisations/organisation/settings/edit-organisation-billing-details.html', + form=form, + ) diff --git a/app/main/views/service_settings.py b/app/main/views/service_settings.py index 920866399..817ac1ab4 100644 --- a/app/main/views/service_settings.py +++ b/app/main/views/service_settings.py @@ -43,7 +43,7 @@ from app.main.forms import ( RateLimit, RenameServiceForm, SearchByNameForm, - ServiceBillingDetailsForm, + BillingDetailsForm, ServiceContactDetailsForm, ServiceDataRetentionEditForm, ServiceDataRetentionForm, @@ -1214,7 +1214,7 @@ def edit_service_notes(service_id): @main.route("/services//edit-billing-details", methods=['GET', 'POST']) @user_is_platform_admin def edit_service_billing_details(service_id): - form = ServiceBillingDetailsForm( + form = BillingDetailsForm( billing_contact_email_addresses=current_service.billing_contact_email_addresses, billing_contact_names=current_service.billing_contact_names, billing_reference=current_service.billing_reference, diff --git a/app/templates/views/organisations/organisation/settings/edit-organisation-billing-details.html b/app/templates/views/organisations/organisation/settings/edit-organisation-billing-details.html new file mode 100644 index 000000000..faeea1ae9 --- /dev/null +++ b/app/templates/views/organisations/organisation/settings/edit-organisation-billing-details.html @@ -0,0 +1,36 @@ +{% from "components/page-header.html" import page_header %} +{% from "components/page-footer.html" import page_footer %} +{% from "components/form.html" import form_wrapper %} +{% from "components/textbox.html" import textbox %} + +{% extends "org_template.html" %} + +{% block org_page_title %} + Edit organisation billing details +{% endblock %} + +{% block maincolumn_content %} + + {{ page_header( + 'Edit organisation billing details', + back_link=url_for('.organisation_settings', org_id=current_org.id) + ) }} + + {% call form_wrapper() %} + {{ form.billing_contact_names(param_extensions={"classes": "govuk-!-width-full"}) }} + {{ form.billing_contact_email_addresses(param_extensions={"classes": "govuk-!-width-full"}) }} +
+ {{ form.billing_reference(param_extensions={"classes": "govuk-!-width-full"}) }} + {{ form.purchase_order_number(param_extensions={"classes": "govuk-!-width-full"}) }} +
+ {{ textbox( + form.notes, + rows=4, + width='1-1', + autofocus=False, + autosize=True, + ) }} + {{ page_footer('Save') }} + {% endcall %} + +{% endblock %} diff --git a/tests/app/main/views/organisations/test_organisations.py b/tests/app/main/views/organisations/test_organisations.py index 4a1c08bae..9d044627c 100644 --- a/tests/app/main/views/organisations/test_organisations.py +++ b/tests/app/main/views/organisations/test_organisations.py @@ -1328,3 +1328,37 @@ def test_organisation_settings_links_to_edit_organisation_billing_details_page( assert len(page.find_all( 'a', attrs={'href': '/organisations/{}/settings/edit-billing-details'.format(organisation_one['id'])} )) == 1 + + +def test_view_edit_organisation_billing_details( + platform_admin_client, + organisation_one, + mock_get_organisation, +): + response = platform_admin_client.get( + url_for('main.edit_organisation_billing_details', org_id=organisation_one['id']) + ) + page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') + assert page.select_one('h1').text == "Edit organisation billing details" + labels = page.find_all('label', class_="form-label") + labels_list = [ + 'Contact email addresses', + 'Contact names', + 'Reference', + 'Purchase order number', + 'Notes' + ] + for label in labels: + assert label.text.strip() in labels_list + textbox_names = page.find_all('input', class_='govuk-input govuk-!-width-full') + names_list = [ + 'billing_contact_email_addresses', + 'billing_contact_names', + 'billing_reference', + 'purchase_order_number', + ] + + for name in textbox_names: + assert name.attrs["name"] in names_list + + assert page.find('textarea').attrs["name"] == "notes"