From 8256a4efea2c03ae4eac573f318d71e6aa2fd92e Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Thu, 16 Jul 2015 20:01:34 +0200 Subject: [PATCH] allow selection of question groups via personId --- knowledge/survey/base.py | 2 +- knowledge/survey/browser.py | 26 +++++++++++++++----------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/knowledge/survey/base.py b/knowledge/survey/base.py index a9fb732..467cdff 100644 --- a/knowledge/survey/base.py +++ b/knowledge/survey/base.py @@ -48,7 +48,7 @@ class Questionnaire(AdapterBase, Questionnaire): def questionGroups(self): return self.getQuestionGroups() - def getQuestionGroups(self): + def getQuestionGroups(self, personId=None): return [adapted(c) for c in self.context.getChildren()] @property diff --git a/knowledge/survey/browser.py b/knowledge/survey/browser.py index 48a341f..888051e 100644 --- a/knowledge/survey/browser.py +++ b/knowledge/survey/browser.py @@ -62,9 +62,8 @@ class SurveyView(InstitutionMixin, ConceptView): @Lazy def title(self): title = self.context.title - personId = self.request.form.get('person') - if personId: - person = adapted(getObjectForUid(personId)) + if self.personId: + person = adapted(getObjectForUid(self.personId)) if person is not None: return '%s: %s' % (title, person.title) return title @@ -80,6 +79,10 @@ class SurveyView(InstitutionMixin, ConceptView): return '' return qs + @Lazy + def personId(self): + return self.request.form.get('person') + @Lazy def report(self): return self.request.form.get('report') @@ -104,7 +107,8 @@ class SurveyView(InstitutionMixin, ConceptView): def groups(self): result = [] if self.questionnaireType == 'pref_selection': - groups = [g.questions for g in self.adapted.questionGroups] + groups = [g.questions for g in + self.adapted.getQuestionGroups(self.personId)] questions = [] for idxg, g in enumerate(groups): qus = [] @@ -126,7 +130,7 @@ class SurveyView(InstitutionMixin, ConceptView): result.append(dict(title=u'Question', infoText=None, questions=questions[idx:idx+bs])) else: - for group in self.adapted.questionGroups: + for group in self.adapted.getQuestionGroups(self.personId): result.append(dict(title=group.title, infoText=self.getInfoText(group), questions=group.questions)) @@ -185,7 +189,7 @@ class SurveyView(InstitutionMixin, ConceptView): uid = self.getUidForObject(c) data = respManager.load(uid, instUid) if data: - resp = Response(self.adapted, None) + resp = Response(self.adapted, self.personId) for qu in self.adapted.questions: if qu.questionType in (None, 'value_selection'): if qu.uid in data: @@ -195,7 +199,7 @@ class SurveyView(InstitutionMixin, ConceptView): else: resp.texts[qu] = data.get(qu.uid) or u'' qgAvailable = True - for qg in self.adapted.questionGroups: + for qg in self.adapted.getQuestionGroups(self.personId): if qg.uid in data: resp.values[qg] = data[qg.uid] else: @@ -227,7 +231,7 @@ class SurveyView(InstitutionMixin, ConceptView): if self.adapted.questionnaireType == 'pref_selection': return self.prefsResults(respManager, form, action) data = {} - response = Response(self.adapted, None) + response = Response(self.adapted, self.personId) for key, value in form.items(): if key.startswith('question_'): if value != 'none': @@ -265,7 +269,7 @@ class SurveyView(InstitutionMixin, ConceptView): respManager = Responses(self.context) self.teamData = self.getTeamData(respManager) response = Response(self.adapted, None) - groups = self.adapted.questionGroups + groups = self.adapted.getQuestionGroups(self.pesonId) teamValues = response.getTeamResult(groups, self.teamData) for idx, r in enumerate(teamValues): group = r['group'] @@ -314,7 +318,7 @@ class SurveyView(InstitutionMixin, ConceptView): #self.errors = self.check(response) if self.errors: return [] - for group in self.adapted.questionGroups: + for group in self.adapted.getQuestionGroups(self.personId): score = 0 for qu in group.questions: value = data.get(qu.uid) or 0 @@ -333,7 +337,7 @@ class SurveyView(InstitutionMixin, ConceptView): text='Please answer the obligatory questions.')) break qugroups = {} - for qugroup in self.adapted.questionGroups: + for qugroup in self.adapted.getQuestionGroups(self.personId): qugroups[qugroup] = 0 for qu in values: qugroups[qu.questionGroup] += 1