From adbdb2840bc2576666d7cc922ca76871ac9130e9 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Sun, 19 Apr 2015 15:16:49 +0200 Subject: [PATCH] provide institution selection for team-based surveys --- knowledge/browser.py | 61 ++++++++++++++++++++++++++++++++- knowledge/survey/browser.py | 17 ++++++--- knowledge/survey/interfaces.py | 32 ++++++++++++----- knowledge/survey/view_macros.pt | 6 +++- 4 files changed, 101 insertions(+), 15 deletions(-) diff --git a/knowledge/browser.py b/knowledge/browser.py index 6126661..459863c 100644 --- a/knowledge/browser.py +++ b/knowledge/browser.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2013 Helmut Merz helmutm@cy55.de +# Copyright (c) 2015 Helmut Merz helmutm@cy55.de # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,8 +30,13 @@ from cybertools.typology.interfaces import IType from loops.browser.action import DialogAction from loops.browser.common import BaseView from loops.browser.concept import ConceptView +from loops.common import adapted from loops.knowledge.interfaces import IPerson, ITask from loops.organize.party import getPersonForUser +from loops.organize.personal import favorite +from loops.organize.personal.interfaces import IFavorites +from loops.security.common import checkPermission +from loops import util from loops.util import _ @@ -69,6 +74,60 @@ actions.register('createQualification', 'portlet', DialogAction, ) +class InstitutionMixin(object): + + knowledge_macros = knowledge_macros + + @Lazy + def institutionType(self): + return self.conceptManager['institution'] + + @Lazy + def institutions(self): + if checkPermission('loops.ManageWorkspaces', self.context): + return self.getAllInstitutions() + result = [] + p = getPersonForUser(self.context, self.request) + if p is None: + return result + for parent in p.getParents( + [self.memberPredicate, self.masterPredicate]): + if parent.conceptType == self.institutionType: + result.append(dict( + object=adapted(parent), + title=parent.title, + uid=util.getUidForObject(parent))) + return result + + def getAllInstitutions(self): + insts = self.institutionType.getChildren([self.typePredicate]) + return [dict(object=adapted(inst), + title=inst.title, + uid=util.getUidForObject(inst)) for inst in insts] + + def setInstitution(self, uid): + inst = util.getObjectForUid(uid) + person = getPersonForUser(self.context, self.request) + favorite.setInstitution(person, inst) + self.institution = inst + return True + + def getSavedInstitution(self): + person = getPersonForUser(self.context, self.request) + favorites = IFavorites(self.loopsRoot.getRecordManager()['favorites']) + for inst in favorites.list(person, type='institution'): + return adapted(util.getObjectForUid(inst)) + + @Lazy + def institution(self): + saved = self.getSavedInstitution() + for inst in self.institutions: + if inst['object'] == saved: + return inst['object'] + if self.institutions: + return self.institutions[0]['object'] + + class MyKnowledge(ConceptView): template = template diff --git a/knowledge/survey/browser.py b/knowledge/survey/browser.py index 864f62f..09286ef 100644 --- a/knowledge/survey/browser.py +++ b/knowledge/survey/browser.py @@ -32,6 +32,7 @@ from cybertools.util.date import formatTimeStamp from loops.browser.concept import ConceptView from loops.browser.node import NodeView from loops.common import adapted, baseObject +from loops.knowledge.browser import InstitutionMixin from loops.knowledge.survey.response import Responses from loops.organize.party import getPersonForUser from loops.util import getObjectForUid @@ -40,7 +41,7 @@ from loops.util import _ template = ViewPageTemplateFile('view_macros.pt') -class SurveyView(ConceptView): +class SurveyView(InstitutionMixin, ConceptView): data = None errors = None @@ -69,6 +70,11 @@ class SurveyView(ConceptView): if self.editable: return 'index.html' + def update(self): + instUid = self.request.form.get('select_institution') + if instUid: + return self.setInstitution(instUid) + @Lazy def groups(self): result = [] @@ -129,11 +135,12 @@ class SurveyView(ConceptView): pred = self.conceptManager.get('ismember') if pred is None: return result - personId = respManager.personId - person = self.getObjectForUid(personId) - inst = person.getParents([pred]) + #personId = respManager.personId + #person = self.getObjectForUid(personId) + #inst = person.getParents([pred]) + inst = self.institution if inst: - for c in inst[0].getChildren([pred]): + for c in inst.getChildren([pred]): uid = self.getUidForObject(c) data = respManager.load(uid) if data: diff --git a/knowledge/survey/interfaces.py b/knowledge/survey/interfaces.py index f6d0b5d..49ab653 100644 --- a/knowledge/survey/interfaces.py +++ b/knowledge/survey/interfaces.py @@ -40,6 +40,16 @@ class IQuestionnaire(IConceptSchema, interfaces.IQuestionnaire): missing_value=u'', required=False) + questionnaireType = schema.Choice( + title=_(u'Questionnaire Type'), + description=_(u'Select the type of the questionnaire.'), + source=KeywordVocabulary(( + ('standard', _(u'Standard Questionnaire')), + ('pref_selection', _(u'Preference Selection')), + )), + default='standard', + required=True) + defaultAnswerRange = schema.Int( title=_(u'Answer Range'), description=_(u'Number of items (answer options) to select from.'), @@ -66,6 +76,12 @@ class IQuestionnaire(IConceptSchema, interfaces.IQuestionnaire): default=False, required=False) + teamBasedEvaluation = schema.Bool( + title=_(u'Team-based Evaluation'), + description=_(u'.'), + default=False, + required=False) + feedbackColumns = Records( title=_(u'Feedback Columns'), description=_(u'Column definitions for the results table ' @@ -109,14 +125,14 @@ class IQuestion(IConceptSchema, interfaces.IQuestion): """ questionType = schema.Choice( - title=_(u'Question Type'), - description=_(u'Select the type of the question.'), - source=KeywordVocabulary(( - ('value_selection', _(u'Value Selection')), - ('text', _(u'Text')), - )), - default='value_selection', - required=True) + title=_(u'Question Type'), + description=_(u'Select the type of the question.'), + source=KeywordVocabulary(( + ('value_selection', _(u'Value Selection')), + ('text', _(u'Text')), + )), + default='value_selection', + required=True) required = schema.Bool( title=_(u'Required'), diff --git a/knowledge/survey/view_macros.pt b/knowledge/survey/view_macros.pt index 8055847..3687152 100644 --- a/knowledge/survey/view_macros.pt +++ b/knowledge/survey/view_macros.pt @@ -4,7 +4,8 @@ + errors item/errors; + dummy item/update">
+ + +

Questionnaire