Skip to content

Commit

Permalink
Merge pull request #323 from maykinmedia/issue-866-questionnaire-impr…
Browse files Browse the repository at this point in the history
…ovements

Fixed #866 -- Adding redirection-option, showing code+id in the admin tree, adding concept-status of questionnaires
  • Loading branch information
alextreme authored Oct 28, 2022
2 parents 75bf807 + 1942dbd commit bd8fa47
Show file tree
Hide file tree
Showing 7 changed files with 109 additions and 9 deletions.
2 changes: 1 addition & 1 deletion src/open_inwoner/pdc/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ def get_context_data(self, **kwargs):
kwargs.update(product_locations=ProductLocation.objects.all()[:1000])
kwargs.update(
questionnaire_roots=QuestionnaireStep.get_root_nodes().filter(
highlighted=True
highlighted=True, published=True
)
)
if self.request.user.is_authenticated:
Expand Down
16 changes: 13 additions & 3 deletions src/open_inwoner/questionnaire/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def clean(self):
class QuestionnaireStepAdmin(TreeAdmin):
form = QuestionnaireStepAdminForm
inlines = (QuestionnaireStepFileInline,)
list_display = ("display_question_answer", "highlighted")
list_display = ("display_question_answer", "highlighted", "published")
prepopulated_fields = {"slug": ("question",)}
save_as = True
list_editable = ("highlighted",)
Expand Down Expand Up @@ -83,6 +83,8 @@ class QuestionnaireStepAdmin(TreeAdmin):
"description",
"category",
"highlighted",
"published",
"redirect_to",
),
},
),
Expand All @@ -97,11 +99,19 @@ class QuestionnaireStepAdmin(TreeAdmin):
},
),
)
raw_id_fields = ("redirect_to",)

def display_question_answer(self, obj):
redirect = ""
if obj.redirect_to:
redirect = " - doorsturen -> {} - {}".format(
obj.redirect_to.question, obj.redirect_to.id
)

postfix = " <small>({} - {}{})</small>".format(obj.id, obj.code, redirect)
if not obj.parent_answer:
return obj.question
return "{} -> {}</p>".format(obj.parent_answer, obj.question)
return obj.question + postfix
return "{} -> {}".format(obj.parent_answer, obj.question) + postfix

display_question_answer.allow_tags = True

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Generated by Django 3.2.15 on 2022-10-28 09:33

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("questionnaire", "0017_auto_20220617_0922"),
]

operations = [
migrations.AddField(
model_name="questionnairestep",
name="published",
field=models.BooleanField(
default=True,
help_text="Whether the questionnaire-tree should be visible or not, only relevant for the top-level question",
verbose_name="Gepubliceerd",
),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Generated by Django 3.2.15 on 2022-10-28 09:44

import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("questionnaire", "0018_questionnairestep_published"),
]

operations = [
migrations.AddField(
model_name="questionnairestep",
name="redirect_to",
field=models.ForeignKey(
blank=True,
help_text="Indien ingesteld dan wordt de gebruiker na het kiezen van het antwoord doorgestuurd naar een andere vragenlijststap (eventueel in een andere boom",
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="questionnaire.questionnairestep",
verbose_name="Doorsturen naar andere stap (experimenteel)",
),
),
migrations.AlterField(
model_name="questionnairestep",
name="highlighted",
field=models.BooleanField(
default=False,
help_text="Alleen relevant voor vraag op het hoofdniveau. Indien aangevinkt dan wordt deze vraag getoond op de homepage.",
verbose_name="Uitgelicht",
),
),
migrations.AlterField(
model_name="questionnairestep",
name="published",
field=models.BooleanField(
default=True,
help_text="Alleen relevant voor vraag op het hoofdniveau. Indien uitgevinkt dan kunnen alleen beheerders de vragenlijst zien & doorlopen.",
verbose_name="Gepubliceerd",
),
),
]
23 changes: 21 additions & 2 deletions src/open_inwoner/questionnaire/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,26 @@ class QuestionnaireStep(MP_Node):
highlighted = models.BooleanField(
_("Highlighted"),
default=False,
help_text=_("Whether the questionnaire should be highlighted or not."),
help_text=_(
"Alleen relevant voor vraag op het hoofdniveau. Indien aangevinkt dan wordt deze vraag getoond op de homepage."
),
)
published = models.BooleanField(
verbose_name=_("Published"),
default=True,
help_text=_(
"Alleen relevant voor vraag op het hoofdniveau. Indien uitgevinkt dan kunnen alleen beheerders de vragenlijst zien & doorlopen."
),
)
redirect_to = models.ForeignKey(
"self",
on_delete=models.SET_NULL,
verbose_name=_("Doorsturen naar andere stap (experimenteel)"),
blank=True,
null=True,
help_text=_(
"Indien ingesteld dan wordt de gebruiker na het kiezen van het antwoord doorgestuurd naar een andere vragenlijststap (eventueel in een andere boom)"
),
)
related_products = models.ManyToManyField(
"pdc.Product",
Expand All @@ -91,7 +110,7 @@ class Meta:
ordering = ("path",)

def __str__(self) -> str:
return self.question
return "{} ({} - {})".format(self.question, self.id, self.code)

def get_absolute_url(self) -> str:
if self.is_root():
Expand Down
2 changes: 1 addition & 1 deletion src/open_inwoner/questionnaire/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ def test_slug_unique(self):

def test_str(self):
root = QuestionnaireStepFactory.create(question="foo")
self.assertEqual("foo", str(root))
self.assertTrue(str(root).startswith("foo"))

def test_get_absolute_url_root(self):
root = QuestionnaireStepFactory.create(code="foo", slug="foo")
Expand Down
9 changes: 7 additions & 2 deletions src/open_inwoner/questionnaire/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,10 @@ def get_object(self) -> QuestionnaireStep:
)

if slug:
return get_object_or_404(QuestionnaireStep, slug=slug)
if getattr(self.request, "user", False) and self.request.user.is_staff:
return get_object_or_404(QuestionnaireStep, slug=slug)
else:
return get_object_or_404(QuestionnaireStep, slug=slug, published=True)

def get_form_kwargs(self) -> dict:
instance = self.get_object()
Expand All @@ -71,6 +74,8 @@ def get_form_kwargs(self) -> dict:

def form_valid(self, form: QuestionnaireStepForm):
questionnaire_step = form.cleaned_data["answer"]
if questionnaire_step.redirect_to:
questionnaire_step = questionnaire_step.redirect_to
self.request.session[QUESTIONNAIRE_SESSION_KEY] = questionnaire_step.slug
return HttpResponseRedirect(redirect_to=questionnaire_step.get_absolute_url())

Expand Down Expand Up @@ -148,4 +153,4 @@ def crumbs(self):
]

def get_queryset(self):
return QuestionnaireStep.get_root_nodes()
return QuestionnaireStep.get_root_nodes().filter(published=True)

0 comments on commit bd8fa47

Please sign in to comment.