preferences questionnaire basically working
This commit is contained in:
parent
38d74bcb21
commit
144e6e5412
2 changed files with 108 additions and 3 deletions
|
@ -84,6 +84,10 @@ class SurveyView(InstitutionMixin, ConceptView):
|
||||||
def report(self):
|
def report(self):
|
||||||
return self.request.form.get('report')
|
return self.request.form.get('report')
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def questionnaireType(self):
|
||||||
|
return self.adapted.questionnaireType
|
||||||
|
|
||||||
def teamReports(self):
|
def teamReports(self):
|
||||||
if self.adapted.teamBasedEvaluation:
|
if self.adapted.teamBasedEvaluation:
|
||||||
if checkPermission('loops.ViewRestricted', self.context):
|
if checkPermission('loops.ViewRestricted', self.context):
|
||||||
|
@ -99,11 +103,24 @@ class SurveyView(InstitutionMixin, ConceptView):
|
||||||
@Lazy
|
@Lazy
|
||||||
def groups(self):
|
def groups(self):
|
||||||
result = []
|
result = []
|
||||||
|
if self.questionnaireType == 'pref_selection':
|
||||||
|
groups = [g.questions for g in self.adapted.questionGroups]
|
||||||
|
questions = []
|
||||||
|
for idxg, g in enumerate(groups):
|
||||||
|
qus = []
|
||||||
|
for idxq, qu in enumerate(g):
|
||||||
|
questions.append((idxg + 3 * idxq, qu))
|
||||||
|
questions.sort()
|
||||||
|
questions = [item[1] for item in questions]
|
||||||
|
size = len(questions)
|
||||||
|
for idx in range(0, size, 3):
|
||||||
|
result.append(dict(title=u'Question', infoText=None,
|
||||||
|
questions=questions[idx:idx+3]))
|
||||||
|
return [g for g in result if len(g['questions']) == 3]
|
||||||
if self.adapted.noGrouping:
|
if self.adapted.noGrouping:
|
||||||
questions = list(self.adapted.questions)
|
questions = list(self.adapted.questions)
|
||||||
questions.sort(key=lambda x: x.title)
|
questions.sort(key=lambda x: x.title)
|
||||||
size = len(questions)
|
size = len(questions)
|
||||||
#nb, rem = divmod(size, self.batchSize)
|
|
||||||
bs = self.batchSize
|
bs = self.batchSize
|
||||||
for idx in range(0, size, bs):
|
for idx in range(0, size, bs):
|
||||||
result.append(dict(title=u'Question', infoText=None,
|
result.append(dict(title=u'Question', infoText=None,
|
||||||
|
@ -207,6 +224,8 @@ class SurveyView(InstitutionMixin, ConceptView):
|
||||||
if self.adapted.teamBasedEvaluation and self.institution:
|
if self.adapted.teamBasedEvaluation and self.institution:
|
||||||
respManager.institutionId = self.getUidForObject(
|
respManager.institutionId = self.getUidForObject(
|
||||||
baseObject(self.institution))
|
baseObject(self.institution))
|
||||||
|
if self.adapted.questionnaireType == 'pref_selection':
|
||||||
|
return self.prefsResults(respManager, form, action)
|
||||||
data = {}
|
data = {}
|
||||||
response = Response(self.adapted, None)
|
response = Response(self.adapted, None)
|
||||||
for key, value in form.items():
|
for key, value in form.items():
|
||||||
|
@ -280,6 +299,22 @@ class SurveyView(InstitutionMixin, ConceptView):
|
||||||
result['texts'] = '<br />'.join([unicode(t) for t in texts if t])
|
result['texts'] = '<br />'.join([unicode(t) for t in texts if t])
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def prefsResults(self, respManager, form, action):
|
||||||
|
result = []
|
||||||
|
data = {}
|
||||||
|
for key, value in form.items():
|
||||||
|
if key.startswith('group_') and value:
|
||||||
|
data[value] = 1
|
||||||
|
respManager.save(data)
|
||||||
|
if action == 'save':
|
||||||
|
self.message = u'Your data have been saved.'
|
||||||
|
return []
|
||||||
|
self.data = data
|
||||||
|
#self.errors = self.check(response)
|
||||||
|
if self.errors:
|
||||||
|
return []
|
||||||
|
return result
|
||||||
|
|
||||||
def check(self, response):
|
def check(self, response):
|
||||||
errors = []
|
errors = []
|
||||||
values = response.values
|
values = response.values
|
||||||
|
@ -352,6 +387,11 @@ class SurveyView(InstitutionMixin, ConceptView):
|
||||||
if self.data:
|
if self.data:
|
||||||
return self.data.get(question.uid)
|
return self.data.get(question.uid)
|
||||||
|
|
||||||
|
def getPrefsValue(self, question):
|
||||||
|
self.loadData()
|
||||||
|
if self.data:
|
||||||
|
return self.data.get(question.uid)
|
||||||
|
|
||||||
def getCssClass(self, question):
|
def getCssClass(self, question):
|
||||||
cls = ''
|
cls = ''
|
||||||
if self.errors and self.data.get(question.uid) is None:
|
if self.errors and self.data.get(question.uid) is None:
|
||||||
|
|
|
@ -4,6 +4,9 @@
|
||||||
|
|
||||||
<metal:block define-macro="survey"
|
<metal:block define-macro="survey"
|
||||||
tal:define="feedback item/results;
|
tal:define="feedback item/results;
|
||||||
|
questType item/questionnaireType;
|
||||||
|
questMacro python:
|
||||||
|
'quest_' + (questType or 'standard');
|
||||||
report request/report|nothing;
|
report request/report|nothing;
|
||||||
reportMacro python:
|
reportMacro python:
|
||||||
'report_' + (report or 'standard');
|
'report_' + (report or 'standard');
|
||||||
|
@ -21,9 +24,14 @@
|
||||||
<div tal:condition="feedback">
|
<div tal:condition="feedback">
|
||||||
<metal:block use-macro="item/template/macros/?reportMacro" />
|
<metal:block use-macro="item/template/macros/?reportMacro" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="questionnaire"
|
<div id="questionnaire"
|
||||||
tal:condition="not:feedback">
|
tal:condition="not:feedback">
|
||||||
|
<metal:block use-macro="item/template/macros/?questMacro" />
|
||||||
|
</div>
|
||||||
|
</metal:block>
|
||||||
|
|
||||||
|
|
||||||
|
<metal:block define-macro="quest_standard">
|
||||||
<tal:inst condition="item/adapted/teamBasedEvaluation">
|
<tal:inst condition="item/adapted/teamBasedEvaluation">
|
||||||
<metal:inst use-macro="item/knowledge_macros/select_institution" />
|
<metal:inst use-macro="item/knowledge_macros/select_institution" />
|
||||||
</tal:inst>
|
</tal:inst>
|
||||||
|
@ -91,7 +99,64 @@
|
||||||
i18n:attributes="value"
|
i18n:attributes="value"
|
||||||
onclick="setRadioButtons('none'); return false" />
|
onclick="setRadioButtons('none'); return false" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</metal:block>
|
||||||
|
|
||||||
|
|
||||||
|
<metal:block define-macro="quest_pref_selection">
|
||||||
|
<h3 i18n:translate="">Questionnaire</h3>
|
||||||
|
<div class="error"
|
||||||
|
tal:condition="errors">
|
||||||
|
<div tal:repeat="error errors">
|
||||||
|
<span i18n:translate=""
|
||||||
|
tal:content="error/text" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="message"
|
||||||
|
tal:condition="message"
|
||||||
|
i18n:translate=""
|
||||||
|
tal:content="message" />
|
||||||
|
<form method="post">
|
||||||
|
<table class="listing">
|
||||||
|
<input type="hidden" name="person"
|
||||||
|
tal:define="personId request/person|nothing"
|
||||||
|
tal:condition="personId"
|
||||||
|
tal:attributes="value personId" />
|
||||||
|
<tal:group repeat="group item/groups">
|
||||||
|
<tr>
|
||||||
|
<td> </td>
|
||||||
|
<td> </td></tr>
|
||||||
|
<tr class="vpad">
|
||||||
|
<td tal:define="infoText group/infoText">
|
||||||
|
<b i18n:translate=""
|
||||||
|
tal:content="group/title" />
|
||||||
|
<div class="infotext"
|
||||||
|
tal:condition="infoText">
|
||||||
|
<span tal:content="structure infoText" />
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td />
|
||||||
|
</tr>
|
||||||
|
<tal:question repeat="question group/questions">
|
||||||
|
<tr tal:attributes="class python:item.getCssClass(question)">
|
||||||
|
<td tal:content="question/text" />
|
||||||
|
<td tal:define="value python:item.getPrefsValue(question)">
|
||||||
|
<input type="radio"
|
||||||
|
tal:attributes="name string:group_${repeat/group/index};
|
||||||
|
value question/uid;
|
||||||
|
checked value" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tal:question>
|
||||||
|
</tal:group>
|
||||||
|
</table>
|
||||||
|
<input type="submit" name="submit" value="Evaluate Questionnaire"
|
||||||
|
i18n:attributes="value" />
|
||||||
|
<input type="submit" name="save" value="Save Data"
|
||||||
|
i18n:attributes="value" />
|
||||||
|
<input type="button" name="reset_responses" value="Reset Responses Entered"
|
||||||
|
i18n:attributes="value"
|
||||||
|
onclick="setRadioButtons('none'); return false" />
|
||||||
|
</form>
|
||||||
</metal:block>
|
</metal:block>
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue