diff --git a/knowledge/survey/base.py b/knowledge/survey/base.py index c156d7e..a4a5d57 100644 --- a/knowledge/survey/base.py +++ b/knowledge/survey/base.py @@ -52,7 +52,7 @@ class Questionnaire(AdapterBase, Questionnaire): def questions(self): for qug in self.questionGroups: for qu in qug.questions: - qu.questionnaire = self + #qu.questionnaire = self yield qu @@ -65,6 +65,13 @@ class QuestionGroup(AdapterBase, QuestionGroup): 'questionnaire', 'questions', 'feedbackItems',) _noexportAttributes = _adapterAttributes + @property + def questionnaire(self): + for p in self.context.getParents(): + ap = adapted(p) + if IQuestionnaire.providedBy(ap): + return ap + @property def subobjects(self): return [adapted(c) for c in self.context.getChildren()] @@ -73,6 +80,10 @@ class QuestionGroup(AdapterBase, QuestionGroup): def questions(self): return [obj for obj in self.subobjects if IQuestion.providedBy(obj)] + @property + def feedbackItems(self): + return [obj for obj in self.subobjects if IFeedbackItem.providedBy(obj)] + class Question(AdapterBase, Question): @@ -87,6 +98,20 @@ class Question(AdapterBase, Question): def text(self): return self.context.description + @property + def questionGroup(self): + for p in self.context.getParents(): + ap = adapted(p) + if IQuestionGroup.providedBy(ap): + return ap + + @property + def questionnaire(self): + return self.questionGroup.questionnaire + + def __hash__(self): + return hash(self.context) + class FeedbackItem(AdapterBase, FeedbackItem): @@ -97,3 +122,7 @@ class FeedbackItem(AdapterBase, FeedbackItem): 'text',) _noexportAttributes = _adapterAttributes + @property + def text(self): + return self.context.description + diff --git a/knowledge/survey/browser.py b/knowledge/survey/browser.py index 57072dc..e232866 100644 --- a/knowledge/survey/browser.py +++ b/knowledge/survey/browser.py @@ -24,7 +24,9 @@ surveys and self-assessments. from zope.app.pagetemplate import ViewPageTemplateFile from zope.cachedescriptors.property import Lazy +from cybertools.knowledge.survey.questionnaire import Response from loops.browser.concept import ConceptView +from loops.common import adapted from loops.organize.party import getPersonForUser @@ -33,8 +35,33 @@ template = ViewPageTemplateFile('view_macros.pt') class SurveyView(ConceptView): tabview = 'index.html' + data = None @Lazy def macro(self): return template.macros['survey'] + def results(self): + form = self.request.form + if 'submit' in form: + self.data = {} + response = Response(self.adapted, None) + for key, value in form.items(): + if key.startswith('question_'): + uid = key[len('question_'):] + question = adapted(self.getObjectForUid(uid)) + value = int(value) + self.data[uid] = value + response.values[question] = value + result = response.getGroupedResult() + return [dict(category=r[0].title, text=r[1].text) for r in result] + #return [{'category': 'foo', 'text': 'bar'}] + return [] + + def isChecked(self, question, value): + if self.data is not None: + setting = self.data.get(question.uid) + if setting is not None: + return value == setting + return value == 0 + diff --git a/knowledge/survey/view_macros.pt b/knowledge/survey/view_macros.pt index 44198bc..335b628 100644 --- a/knowledge/survey/view_macros.pt +++ b/knowledge/survey/view_macros.pt @@ -2,33 +2,55 @@ - + - - - - - - - - -
- - - - - -
Does not applyFully applies
-
- -   -   - -
+
+

Feedback

+ + + + + + + +
CategoryResponse
+ +
+
+
+

Questionnaire

+
+ + + + + + + + +
+ + + + + +
Does not applyFully applies
+
+ +   +   + +
+
+ +
diff --git a/locales/de/LC_MESSAGES/loops.mo b/locales/de/LC_MESSAGES/loops.mo index b9a8f3d..17afdea 100644 Binary files a/locales/de/LC_MESSAGES/loops.mo and b/locales/de/LC_MESSAGES/loops.mo differ diff --git a/locales/de/LC_MESSAGES/loops.po b/locales/de/LC_MESSAGES/loops.po index 22a1519..57a243a 100644 --- a/locales/de/LC_MESSAGES/loops.po +++ b/locales/de/LC_MESSAGES/loops.po @@ -184,12 +184,27 @@ msgstr "Negativbewertung" msgid "Value inversion: High selection means low value." msgstr "Invertierung der Bewertung: Hohe gewählte Stufe bedeutet niedriger Wert." +msgid "Questionnaire" +msgstr "Fragebogen" + +msgid "Feedback" +msgstr "Auswertung" + +msgid "Category" +msgstr "Kategorie" + +msgid "Response" +msgstr "Beurteilung" + msgid "Does not apply" msgstr "Trifft nicht zu" msgid "Fully applies" msgstr "Trifft voll zu" +msgid "Evaluate Questionnaire" +msgstr "Fragebogen auswerten" + # competence (qualification) msgid "Validity Period (Months)"