diff --git a/controlpanel/api/migrations/0048_feedback.py b/controlpanel/api/migrations/0048_feedback.py new file mode 100644 index 00000000..022b64ba --- /dev/null +++ b/controlpanel/api/migrations/0048_feedback.py @@ -0,0 +1,41 @@ +# Generated by Django 5.1.2 on 2024-11-29 15:32 + +# Third-party +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("api", "0047_app_cloud_platform_role_arn"), + ] + + operations = [ + migrations.CreateModel( + name="Feedback", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, primary_key=True, serialize=False, verbose_name="ID" + ), + ), + ( + "satisfaction_rating", + models.IntegerField( + choices=[ + (5, "Very satisfied"), + (4, "Satisfied"), + (3, "Neither satisfied or dissatisfied"), + (2, "Dissatisfied"), + (1, "Very dissatisfied"), + ] + ), + ), + ("suggestions", models.TextField()), + ], + options={ + "db_table": "control_panel_api_feedback", + }, + ), + ] diff --git a/controlpanel/api/models/__init__.py b/controlpanel/api/models/__init__.py index 4b49f607..81cd1f7a 100644 --- a/controlpanel/api/models/__init__.py +++ b/controlpanel/api/models/__init__.py @@ -8,6 +8,7 @@ from controlpanel.api.models.app import App from controlpanel.api.models.app_ip_allowlist import AppIPAllowList from controlpanel.api.models.apps3bucket import AppS3Bucket +from controlpanel.api.models.feedback import Feedback from controlpanel.api.models.iam_managed_policy import IAMManagedPolicy from controlpanel.api.models.parameter import Parameter from controlpanel.api.models.policys3bucket import PolicyS3Bucket diff --git a/controlpanel/api/models/feedback.py b/controlpanel/api/models/feedback.py new file mode 100644 index 00000000..797aeaa3 --- /dev/null +++ b/controlpanel/api/models/feedback.py @@ -0,0 +1,23 @@ +# Third-party +from django.db import models + + +class Feedback(models.Model): + SATISFACTION_RATINGS = [ + (5, "Very satisfied"), + (4, "Satisfied"), + (3, "Neither satisfied or dissatisfied"), + (2, "Dissatisfied"), + (1, "Very dissatisfied"), + ] + + satisfaction_rating = models.IntegerField( + choices=SATISFACTION_RATINGS, + null=False, + blank=False, + ) + + suggestions = models.TextField() + + class Meta: + db_table = "control_panel_api_feedback" diff --git a/controlpanel/frontend/forms.py b/controlpanel/frontend/forms.py index c688ace2..65d2e93b 100644 --- a/controlpanel/frontend/forms.py +++ b/controlpanel/frontend/forms.py @@ -16,6 +16,7 @@ from controlpanel.api.models import ( QUICKSIGHT_EMBED_PERMISSION, App, + Feedback, S3Bucket, Tool, User, @@ -655,3 +656,12 @@ def grant_access(self): self.user.user_permissions.add(permission) else: self.user.user_permissions.remove(permission) + + +class FeedbackForm(forms.ModelForm): + class Meta: + model = Feedback + fields = [ + "satisfaction_rating", + "suggestions", + ] diff --git a/controlpanel/frontend/jinja2/feedback-create.html b/controlpanel/frontend/jinja2/feedback-create.html new file mode 100644 index 00000000..4a50d138 --- /dev/null +++ b/controlpanel/frontend/jinja2/feedback-create.html @@ -0,0 +1,80 @@ +{% from "error-message/macro.html" import govukErrorMessage %} +{% from "label/macro.html" import govukLabel %} +{% from "radios/macro.html" import govukRadios %} +{% from "includes/auth0-connections-form.html" import auth0_connections_form with context %} + + +{% extends "base.html" %} + +{% set page_title = "Feedback" %} + +{% block content %} +
Your feedback will help us improve the service.
+{% endblock %} diff --git a/controlpanel/frontend/urls.py b/controlpanel/frontend/urls.py index e5f15d1b..eabd5177 100644 --- a/controlpanel/frontend/urls.py +++ b/controlpanel/frontend/urls.py @@ -268,4 +268,6 @@ ), path("parameters/