Update feedback questions and order

This commit is contained in:
Christian Cueni 2023-05-08 15:39:53 +02:00 committed by Daniel Egger
parent ef37ac0db9
commit 6534cbf8df
8 changed files with 50 additions and 75 deletions

View File

@ -14,7 +14,7 @@
@previous="previousStep()" @previous="previousStep()"
@next="nextStep()" @next="nextStep()"
> >
<div class="container-medium"> <div>
<p v-if="stepNo === 0" class="mt-10"> <p v-if="stepNo === 0" class="mt-10">
{{ {{
$t("feedback.intro", { $t("feedback.intro", {
@ -27,51 +27,47 @@
</p> </p>
<ItRadioGroup <ItRadioGroup
v-if="stepNo === 1" v-if="stepNo === 1"
v-model="wouldRecommend"
class="mb-8"
:items="YES_NO"
/>
<ItRadioGroup
v-if="stepNo === 2"
v-model="satisfaction" v-model="satisfaction"
class="mb-8" class="mb-8"
:items="RATINGS" :items="RATINGS"
/> />
<ItRadioGroup <ItRadioGroup
v-if="stepNo === 3" v-if="stepNo === 2"
v-model="goalAttainment" v-model="goalAttainment"
class="mb-8" class="mb-8"
:items="RATINGS" :items="RATINGS"
/> />
<ItRadioGroup <ItRadioGroup
v-if="stepNo === 4" v-if="stepNo === 3"
v-model="proficiency" v-model="proficiency"
class="mb-8" class="mb-8"
:items="PERCENTAGES" :items="PERCENTAGES"
/> />
<ItRadioGroup <ItRadioGroup
v-if="stepNo === 5" v-if="stepNo === 4"
v-model="receivedMaterials" v-model="preparationTaskClarity"
class="mb-8" class="mb-8"
:items="YES_NO" :items="YES_NO"
/> />
<div v-if="stepNo === 5 && receivedMaterials">
<p class="pb-2">{{ t("feedback.materialsRatingLabel") }}</p>
<ItRadioGroup v-model="materialsRating" class="mb-8" :items="RATINGS" />
</div>
<ItRadioGroup <ItRadioGroup
v-if="stepNo === 6" v-if="stepNo === 5"
v-model="instructorCompetence" v-model="instructorCompetence"
class="mb-8" class="mb-8"
:items="RATINGS" :items="RATINGS"
/> />
<ItRadioGroup <ItRadioGroup
v-if="stepNo === 7" v-if="stepNo === 6"
v-model="instructorRespect" v-model="instructorRespect"
class="mb-8" class="mb-8"
:items="RATINGS" :items="RATINGS"
/> />
<ItTextarea v-if="stepNo === 8" v-model="instructorOpenFeedback" class="mb-8" /> <ItTextarea v-if="stepNo === 7" v-model="instructorOpenFeedback" class="mb-8" />
<ItRadioGroup
v-if="stepNo === 8"
v-model="wouldRecommend"
class="mb-8"
:items="YES_NO"
/>
<ItTextarea v-if="stepNo === 9" v-model="courseNegativeFeedback" class="mb-8" /> <ItTextarea v-if="stepNo === 9" v-model="courseNegativeFeedback" class="mb-8" />
<ItTextarea v-if="stepNo === 10" v-model="coursePositiveFeedback" class="mb-8" /> <ItTextarea v-if="stepNo === 10" v-model="coursePositiveFeedback" class="mb-8" />
<FeedbackCompletition <FeedbackCompletition
@ -142,14 +138,14 @@ const title = computed(
const stepLabels = [ const stepLabels = [
t("general.introduction"), t("general.introduction"),
t("feedback.recommendLabel"),
t("feedback.satisfactionLabel"), t("feedback.satisfactionLabel"),
t("feedback.goalAttainmentLabel"), t("feedback.goalAttainmentLabel"),
t("feedback.proficiencyLabel"), t("feedback.proficiencyLabel"),
t("feedback.receivedMaterialsLabel"), t("feedback.preparationTaskClarityLabel"),
t("feedback.instructorCompetenceLabel"), t("feedback.instructorCompetenceLabel"),
t("feedback.instructorRespectLabel"), t("feedback.instructorRespectLabel"),
t("feedback.instructorOpenFeedbackLabel"), t("feedback.instructorOpenFeedbackLabel"),
t("feedback.recommendLabel"),
t("feedback.courseNegativeFeedbackLabel"), t("feedback.courseNegativeFeedbackLabel"),
t("feedback.coursePositiveFeedbackLabel"), t("feedback.coursePositiveFeedbackLabel"),
t("general.submission"), t("general.submission"),
@ -174,15 +170,14 @@ const { executeMutation } = useMutation(sendFeedbackMutation);
const satisfaction = ref(null); const satisfaction = ref(null);
const goalAttainment = ref(null); const goalAttainment = ref(null);
const wouldRecommend = ref(null);
const proficiency = ref(null); const proficiency = ref(null);
const receivedMaterials = ref(null); const preparationTaskClarity = ref(null);
const materialsRating = ref(null);
const instructorCompetence = ref(null); const instructorCompetence = ref(null);
const instructorRespect = ref(null); const instructorRespect = ref(null);
const coursePositiveFeedback = ref("");
const courseNegativeFeedback = ref("");
const instructorOpenFeedback = ref(""); const instructorOpenFeedback = ref("");
const wouldRecommend = ref(null);
const courseNegativeFeedback = ref("");
const coursePositiveFeedback = ref("");
const mutationResult = ref<any>(null); const mutationResult = ref<any>(null);
@ -207,7 +202,7 @@ const sendFeedback = () => {
} }
const input: SendFeedbackInput = reactive({ const input: SendFeedbackInput = reactive({
data: { data: {
materials_rating: materialsRating, preparation_task_clarity: preparationTaskClarity,
course_negative_feedback: courseNegativeFeedback, course_negative_feedback: courseNegativeFeedback,
course_positive_feedback: coursePositiveFeedback, course_positive_feedback: coursePositiveFeedback,
goald_attainment: goalAttainment, goald_attainment: goalAttainment,
@ -216,7 +211,6 @@ const sendFeedback = () => {
instructor_open_feedback: instructorOpenFeedback, instructor_open_feedback: instructorOpenFeedback,
satisfaction, satisfaction,
proficiency, proficiency,
received_materials: receivedMaterials,
would_recommend: wouldRecommend, would_recommend: wouldRecommend,
}, },
page: props.page.translation_key, page: props.page.translation_key,

View File

@ -87,23 +87,23 @@
"circleFeedback": "Feedback zum Circle", "circleFeedback": "Feedback zum Circle",
"completionDescription": "Dein Feedback ist anonym. Dein Vor- und Nachname werden bei deiner Trainer/-in nicht angezeigt.", "completionDescription": "Dein Feedback ist anonym. Dein Vor- und Nachname werden bei deiner Trainer/-in nicht angezeigt.",
"completionTitle": "Schicke dein Feedback an {name}", "completionTitle": "Schicke dein Feedback an {name}",
"courseNegativeFeedbackLabel": "Wo sehen Sie Verbesserungspotenzial?", "courseNegativeFeedbackLabel": "Wo siehst du Verbesserungspotential?",
"coursePositiveFeedbackLabel": "Was hat Ihnen besonders gut gefallen?", "coursePositiveFeedbackLabel": "Was hat dir besonders gut gefallen?",
"feedbackPageInfo": "Teilnehmer haben das Feedback ausgefüllt", "feedbackPageInfo": "Teilnehmer haben das Feedback ausgefüllt",
"feedbackPageTitle": "Feedback zum Lehrgang", "feedbackPageTitle": "Feedback zum Lehrgang",
"feedbackSent": "Dein Feedback wurde abgeschickt", "feedbackSent": "Dein Feedback wurde abgeschickt",
"goalAttainmentLabel": "Zielerreichung insgesamt", "goalAttainmentLabel": "Zielerreichung insgesamt",
"happy": "Zufrieden", "happy": "Zufrieden",
"instructorCompetenceLabel": "Der Kursleiter war themenstark, fachkompetent.", "instructorCompetenceLabel": "Wie beurteilst du die Themensicherheit und Fachkompetenz des Kursleiters/der Kursleiterin?",
"instructorOpenFeedbackLabel": "Was ich dem Kursleiter sonst noch sagen wollte:", "instructorOpenFeedbackLabel": "Was möchtest du dem Kursleiter/der Kursleiterin sonst noch sagen?",
"instructorRespectLabel": "Fragen und Anregungen der Kursteilnehmenden wurden ernst genommen und aufgegriffen.", "instructorRespectLabel": "Wurden Fragen und Anregungen der Kursteilnehmenden ernst genommen und aufgegriffen?",
"intro": "{name}, dein/e Trainer/-in, bittet dich, ihm/ihr Feedback zu geben. Das ist freiwillig, würde aber ihm/ihr helfen, deine Lernerlebniss zu verbessern.", "intro": "{name}, dein/e Trainer/-in, bittet dich, ihm/ihr Feedback zu geben. Das ist freiwillig, würde aber ihm/ihr helfen, deine Lernerlebniss zu verbessern.",
"materialsRatingLabel": "Falls ja: Wie beurteilen Sie die Vorbereitungsunterlagen (z.B. eLearning)?", "materialsRatingLabel": "Falls ja: Wie beurteilen Sie die Vorbereitungsunterlagen (z.B. eLearning)?",
"noFeedbacks": "Es wurden noch keine Feedbacks abgegeben", "noFeedbacks": "Es wurden noch keine Feedbacks abgegeben",
"proficiencyLabel": "Wie beurteilen Sie Ihre Sicherheit bezüglichen den Themen nach dem Kurs?", "preparationTaskClarityLabel": "Waren die Vorbereitungsaufträge klar und verständlich?",
"proficiencyLabel": "Wie beurteilst du deine Sicherheit bezüglichen den Themen nach dem Kurs?",
"questionTitle": "Frage", "questionTitle": "Frage",
"receivedMaterialsLabel": "Haben Sie Vorbereitungsunterlagen (z.B. eLearning) erhalten?", "recommendLabel": "Würdest du den Kurs weiterempfehlen?",
"recommendLabel": "Würden Sie den Kurs weiterempfehlen?",
"satisfactionLabel": "Zufriedenheit insgesamt", "satisfactionLabel": "Zufriedenheit insgesamt",
"sendFeedback": "Feedback abschicken", "sendFeedback": "Feedback abschicken",
"sentByUsers": "Von {count} Teilnehmern ausgefüllt", "sentByUsers": "Von {count} Teilnehmern ausgefüllt",

View File

@ -83,10 +83,6 @@ const courseSessionsStore = useCourseSessionsStore();
const { t } = useI18n(); const { t } = useI18n();
const orderedQuestions = [ const orderedQuestions = [
{
key: "would_recommend",
question: t("feedback.recommendLabel"),
},
{ {
key: "satisfaction", key: "satisfaction",
question: t("feedback.satisfactionLabel"), question: t("feedback.satisfactionLabel"),
@ -100,12 +96,8 @@ const orderedQuestions = [
question: t("feedback.proficiencyLabel"), question: t("feedback.proficiencyLabel"),
}, },
{ {
key: "received_materials", key: "preparation_task_clarity",
question: t("feedback.receivedMaterialsLabel"), question: t("feedback.preparationTaskClarityLabel"),
},
{
key: "materials_rating",
question: t("feedback.materialsRatingLabel"),
}, },
{ {
key: "instructor_competence", key: "instructor_competence",
@ -119,6 +111,10 @@ const orderedQuestions = [
key: "instructor_open_feedback", key: "instructor_open_feedback",
question: t("feedback.instructorOpenFeedbackLabel"), question: t("feedback.instructorOpenFeedbackLabel"),
}, },
{
key: "would_recommend",
question: t("feedback.recommendLabel"),
},
{ {
key: "course_negative_feedback", key: "course_negative_feedback",
question: t("feedback.courseNegativeFeedbackLabel"), question: t("feedback.courseNegativeFeedbackLabel"),
@ -132,11 +128,10 @@ const orderedQuestions = [
const ratingKeys = [ const ratingKeys = [
"satisfaction", "satisfaction",
"goal_attainment", "goal_attainment",
"materials_rating",
"instructor_competence", "instructor_competence",
"instructor_respect", "instructor_respect",
]; ];
const verticalChartKyes = ["received_materials", "would_recommend"]; const verticalChartKyes = ["preparation_task_clarity", "would_recommend"];
const horizontalChartKeys = ["proficiency"]; const horizontalChartKeys = ["proficiency"];
const openKeys = [ const openKeys = [
"course_negative_feedback", "course_negative_feedback",

View File

@ -11,8 +11,7 @@ class FeedbackFactory(DjangoModelFactory):
"satisfaction": FuzzyInteger(2, 4), "satisfaction": FuzzyInteger(2, 4),
"goal_attainment": FuzzyInteger(3, 4), "goal_attainment": FuzzyInteger(3, 4),
"proficiency": FuzzyChoice([20, 40, 60, 80]), "proficiency": FuzzyChoice([20, 40, 60, 80]),
"received_materials": FuzzyChoice([True, False]), "preparation_task_clarity": FuzzyChoice([True, False]),
"materials_rating": FuzzyInteger(2, 4),
"instructor_competence": FuzzyInteger(3, 4), "instructor_competence": FuzzyInteger(3, 4),
"instructor_respect": FuzzyInteger(3, 4), "instructor_respect": FuzzyInteger(3, 4),
"instructor_open_feedback": FuzzyChoice( "instructor_open_feedback": FuzzyChoice(
@ -23,18 +22,18 @@ class FeedbackFactory(DjangoModelFactory):
] ]
), ),
"would_recommend": FuzzyChoice([True, False]), "would_recommend": FuzzyChoice([True, False]),
"course_positive_feedback": FuzzyChoice(
[
"Die Präsentation war super",
"Das Beispiel mit der Katze fand ich sehr gut veranschaulicht!",
]
),
"course_negative_feedback": FuzzyChoice( "course_negative_feedback": FuzzyChoice(
[ [
"Es wäre praktisch, Zugang zu einer FAQ zu haben.", "Es wäre praktisch, Zugang zu einer FAQ zu haben.",
"Es wäre schön, mehr Videos hinzuzufügen.", "Es wäre schön, mehr Videos hinzuzufügen.",
] ]
), ),
"course_positive_feedback": FuzzyChoice(
[
"Die Präsentation war super",
"Das Beispiel mit der Katze fand ich sehr gut veranschaulicht!",
]
),
} }
) )

View File

@ -53,18 +53,6 @@ class FeedbackResponse(models.Model):
) )
super(FeedbackResponse, self).save(*args, **kwargs) super(FeedbackResponse, self).save(*args, **kwargs)
# satisfaction = FeedbackIntegerField()
# goal_attainment = FeedbackIntegerField()
# proficiency = models.IntegerField(null=True)
# received_materials = models.BooleanField(null=True)
# materials_rating = FeedbackIntegerField()
# instructor_competence = FeedbackIntegerField()
# instructor_respect = FeedbackIntegerField()
# instructor_open_feedback = models.TextField(blank=True)
# would_recommend = models.BooleanField(null=True)
# course_positive_feedback = models.TextField(blank=True)
# course_negative_feedback = models.TextField(blank=True)
data = models.JSONField(default=dict) data = models.JSONField(default=dict)
created_at = models.DateTimeField(auto_now_add=True) created_at = models.DateTimeField(auto_now_add=True)

View File

@ -15,7 +15,7 @@ class CourseFeedbackSerializer(serializers.Serializer):
satisfaction = FeedbackIntegerField() satisfaction = FeedbackIntegerField()
goal_attainment = FeedbackIntegerField() goal_attainment = FeedbackIntegerField()
proficiency = serializers.IntegerField(required=False, allow_null=True) proficiency = serializers.IntegerField(required=False, allow_null=True)
received_materials = serializers.BooleanField(required=False, allow_null=True) preparation_task_clarity = serializers.BooleanField()
materials_rating = FeedbackIntegerField() materials_rating = FeedbackIntegerField()
instructor_competence = FeedbackIntegerField() instructor_competence = FeedbackIntegerField()
instructor_respect = FeedbackIntegerField() instructor_respect = FeedbackIntegerField()

View File

@ -190,8 +190,7 @@ class FeedbackDetailApiTestCase(FeedbackApiBaseTestCase):
"satisfaction": [1, 4, 2], "satisfaction": [1, 4, 2],
"goal_attainment": [2, 4, 3], "goal_attainment": [2, 4, 3],
"proficiency": [20, 60, 80], "proficiency": [20, 60, 80],
"received_materials": [True, False, True], "preparation_task_clarity": [True, False, True],
"materials_rating": [3, 2, 1],
"instructor_competence": [1, 2, 3], "instructor_competence": [1, 2, 3],
"instructor_respect": [40, 80, 100], "instructor_respect": [40, 80, 100],
"instructor_open_feedback": ["super", "ok", "naja"], "instructor_open_feedback": ["super", "ok", "naja"],
@ -214,14 +213,15 @@ class FeedbackDetailApiTestCase(FeedbackApiBaseTestCase):
"satisfaction": feedback_data["satisfaction"][i], "satisfaction": feedback_data["satisfaction"][i],
"goal_attainment": feedback_data["goal_attainment"][i], "goal_attainment": feedback_data["goal_attainment"][i],
"proficiency": feedback_data["proficiency"][i], "proficiency": feedback_data["proficiency"][i],
"received_materials": feedback_data["received_materials"][i], "preparation_task_clarity": feedback_data[
"materials_rating": feedback_data["materials_rating"][i], "preparation_task_clarity"
][i],
"instructor_competence": feedback_data["instructor_competence"][i], "instructor_competence": feedback_data["instructor_competence"][i],
"instructor_open_feedback": feedback_data[ "instructor_open_feedback": feedback_data[
"instructor_open_feedback" "instructor_open_feedback"
][i], ][i],
"instructor_respect": feedback_data["instructor_respect"][i],
"would_recommend": feedback_data["would_recommend"][i], "would_recommend": feedback_data["would_recommend"][i],
"instructor_respect": feedback_data["instructor_respect"][i],
"course_positive_feedback": feedback_data[ "course_positive_feedback": feedback_data[
"course_positive_feedback" "course_positive_feedback"
][i], ][i],

View File

@ -12,14 +12,13 @@ FEEDBACK_FIELDS = [
"satisfaction", "satisfaction",
"goal_attainment", "goal_attainment",
"proficiency", "proficiency",
"received_materials",
"materials_rating",
"instructor_competence", "instructor_competence",
"instructor_respect", "instructor_respect",
"instructor_open_feedback", "instructor_open_feedback",
"would_recommend", "would_recommend",
"course_positive_feedback", "course_positive_feedback",
"course_negative_feedback", "course_negative_feedback",
"preparation_task_clarity",
] ]