diff --git a/app/main/dao/services_dao.py b/app/main/dao/services_dao.py index 9881d6689..da4104755 100644 --- a/app/main/dao/services_dao.py +++ b/app/main/dao/services_dao.py @@ -1,5 +1,7 @@ from datetime import datetime +from sqlalchemy.orm import load_only + from app import db from app.models import Service @@ -39,3 +41,7 @@ def add_service(service): def find_service_by_service_name(service_name): return Service.query.filter_by(name=service_name).first() + + +def find_all_service_names(): + return [x.name for x in Service.query.options(load_only("name")).all()] diff --git a/app/main/forms.py b/app/main/forms.py index f73ac0ef2..98d82df59 100644 --- a/app/main/forms.py +++ b/app/main/forms.py @@ -2,10 +2,9 @@ from datetime import datetime from flask import session from flask_wtf import Form -from wtforms import StringField, PasswordField +from wtforms import StringField, PasswordField, ValidationError from wtforms.validators import DataRequired, Email, Length, Regexp - -from app.main.dao import verify_codes_dao, services_dao +from app.main.dao import verify_codes_dao from app.main.encryption import check_hash from app.main.validators import Blacklist @@ -83,14 +82,19 @@ class TextNotReceivedForm(Form): class AddServiceForm(Form): + def __init__(self, service_names, *args, **kwargs): + self.service_names = service_names + super(AddServiceForm, self).__init__(*args, **kwargs) + service_name = StringField(validators=[DataRequired(message='Please enter your service name')]) def validate_service_name(self, a): - if services_dao.find_service_by_service_name(self.service_name.data) is not None: - self.service_name.errors.append('Duplicate service name') - return False - else: - return True + print("a {}".format(a)) + print("self.service_name {}".format(self.service_name.data)) + print("service_names {}".format(self.service_names)) + if self.service_name.data in self.service_names: + print('here') + raise ValidationError('Service name already exists') def validate_codes(field, code_type): diff --git a/app/main/views/add_service.py b/app/main/views/add_service.py index 4d03be4f8..f6d74e7ac 100644 --- a/app/main/views/add_service.py +++ b/app/main/views/add_service.py @@ -1,25 +1,20 @@ from flask import render_template, jsonify, redirect, session from flask_login import login_required - from app.main import main from app.main.dao import services_dao, users_dao from app.main.forms import AddServiceForm -@main.route("/add-service", methods=['GET']) +@main.route("/add-service", methods=['GET', 'POST']) @login_required def add_service(): - return render_template('views/add-service.html', form=AddServiceForm()) - - -@main.route("/add-service", methods=['POST']) -@login_required -def process_add_service(): - form = AddServiceForm() - + form = AddServiceForm(services_dao.find_all_service_names()) + print("serivce_names {}".format(services_dao.find_all_service_names())) if form.validate_on_submit(): + user = users_dao.get_user_by_id(session['user_id']) services_dao.insert_new_service(form.service_name.data, user) return redirect('/dashboard') else: - return jsonify(form.errors), 400 + return render_template('views/add-service.html', form=form) +ยง \ No newline at end of file diff --git a/app/templates/govuk_template.html b/app/templates/govuk_template.html index dc5747325..c3a4fa78f 100644 --- a/app/templates/govuk_template.html +++ b/app/templates/govuk_template.html @@ -1,3 +1,4 @@ +{%- from "macros.html" import render_field %} {% block top_of_page %}{% endblock %} diff --git a/app/templates/macros.html b/app/templates/macros.html new file mode 100644 index 000000000..643099498 --- /dev/null +++ b/app/templates/macros.html @@ -0,0 +1,12 @@ +{% macro render_field(field) %} +