provide institution selection for team-based surveys
This commit is contained in:
parent
09b75367a7
commit
adbdb2840b
4 changed files with 101 additions and 15 deletions
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
|
||||
<metal:block define-macro="survey"
|
||||
tal:define="feedback item/results;
|
||||
errors item/errors">
|
||||
errors item/errors;
|
||||
dummy item/update">
|
||||
<metal:title use-macro="item/conceptMacros/concepttitle_only" />
|
||||
<tal:description condition="not:feedback">
|
||||
<div tal:define="header item/adapted/questionnaireHeader"
|
||||
|
@ -60,6 +61,9 @@
|
|||
|
||||
<div id="questionnaire"
|
||||
tal:condition="not:feedback">
|
||||
<tal:inst condition="item/adapted/teamBasedEvaluation">
|
||||
<metal:inst use-macro="item/knowledge_macros/select_institution" />
|
||||
</tal:inst>
|
||||
<h3 i18n:translate="">Questionnaire</h3>
|
||||
<div class="error"
|
||||
tal:condition="errors">
|
||||
|
|
Loading…
Add table
Reference in a new issue