make team reports callable independent of filling a questionnaire

This commit is contained in:
Helmut Merz 2015-04-21 10:06:28 +02:00
parent 57aee009b6
commit 2ea0689a05
5 changed files with 119 additions and 48 deletions

View file

@ -3,7 +3,7 @@
<metal:institution define-macro="select_institution">
<form method="post">
<div style="font-size: 120%; padding-bottom: 10px">
<div style="font-size: 120%; padding: 10px 0 10px 0">
<span i18n:translate="">Organisation/Team</span>:
<b tal:content="item/institution/title" />
<img tal:condition="python:len(item.institutions) > 1"

View file

@ -35,6 +35,7 @@ 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.security.common import checkPermission
from loops.util import getObjectForUid
from loops.util import _
@ -72,6 +73,23 @@ class SurveyView(InstitutionMixin, ConceptView):
if self.editable:
return 'index.html'
def getUrlParamString(self):
qs = super(SurveyView, self).getUrlParamString()
if qs.startswith('?report='):
return ''
return qs
@Lazy
def report(self):
return self.request.form.get('report')
def teamReports(self):
if self.adapted.teamBasedEvaluation:
if checkPermission('loops.ViewRestricted', self.context):
return [dict(name='standard', label='label_survey_report_standard'),
dict(name='questions',
label='label_survey_report_questions')]
def update(self):
instUid = self.request.form.get('select_institution')
if instUid:
@ -123,8 +141,12 @@ class SurveyView(InstitutionMixin, ConceptView):
cols = [
dict(name='text', label=u'Response'),
dict(name='score', label=u'Score')]
if self.report == 'standard':
cols = [c for c in cols if c['name'] in self.teamColumns]
return cols
teamColumns = ['category', 'average', 'stddev', 'teamRank', 'text']
@Lazy
def showTeamResults(self):
for c in self.feedbackColumns:
@ -137,9 +159,6 @@ class SurveyView(InstitutionMixin, ConceptView):
pred = self.conceptManager.get('ismember')
if pred is None:
return result
#personId = respManager.personId
#person = self.getObjectForUid(personId)
#inst = person.getParents([pred])
inst = self.institution
instUid = self.getUidForObject(inst)
if inst:
@ -167,6 +186,8 @@ class SurveyView(InstitutionMixin, ConceptView):
return result
def results(self):
if self.report:
return self.teamResults(self.report)
form = self.request.form
action = None
for k in ('submit', 'save'):
@ -208,12 +229,27 @@ class SurveyView(InstitutionMixin, ConceptView):
for r in values]
if self.showTeamResults:
self.teamData = self.getTeamData(respManager)
teamValues = response.getTeamResult(values, self.teamData)
groups = [r['group'] for r in values]
teamValues = response.getTeamResult(groups, self.teamData)
for idx, r in enumerate(teamValues):
result[idx]['average'] = int(round(r['average'] * 100))
result[idx]['teamRank'] = r['rank']
return result
def teamResults(self, report):
result = []
respManager = Responses(self.context)
self.teamData = self.getTeamData(respManager)
response = Response(self.adapted, None)
groups = self.adapted.questionGroups
teamValues = response.getTeamResult(groups, self.teamData)
for idx, r in enumerate(teamValues):
item = dict(category=r['group'].title,
average=int(round(r['average'] * 100)),
teamRank=r['rank'])
result.append(item)
return result
def check(self, response):
errors = []
values = response.values

View file

@ -4,6 +4,9 @@
<metal:block define-macro="survey"
tal:define="feedback item/results;
report request/report|nothing;
reportMacro python:
'report_' + (report or 'standard');
errors item/errors;
message item/message;
dummy item/update">
@ -16,48 +19,7 @@
</tal:description>
<div tal:condition="feedback">
<h3 i18n:translate="">Feedback</h3>
<div tal:define="header item/adapted/feedbackHeader"
tal:condition="header"
tal:content="structure python:
item.renderText(header, 'text/restructured')" />
<table class="listing">
<tr>
<th i18n:translate="">Category</th>
<th tal:repeat="col item/feedbackColumns"
i18n:translate=""
tal:attributes="class python:
col['name'] != 'text' and 'center' or None"
tal:content="col/label" />
</tr>
<tr style="vertical-align: top"
tal:repeat="fbitem feedback">
<td style="vertical-align: top"
tal:content="fbitem/category" />
<tal:cols repeat="col item/feedbackColumns">
<td style="vertical-align: top"
tal:define="name col/name"
tal:attributes="class python:name != 'text' and 'center' or None"
tal:content="fbitem/?name" />
</tal:cols>
</tr>
</table>
<p tal:define="teamData item/teamData"
tal:condition="teamData">
<b><span i18n:translate="">Team Size</span>:
<span tal:content="python:len(teamData)" /></b><br />&nbsp;
</p>
<div class="button" id="show_questionnaire">
<a href="" xxonclick="back(); return false"
i18n:translate=""
tal:attributes="href string:${request/URL}${item/urlParamString}">
Back to Questionnaire</a>
<br />
</div>
<div tal:define="footer item/adapted/feedbackFooter"
tal:condition="footer"
tal:content="structure python:
item.renderText(footer, 'text/restructured')" />
<metal:block use-macro="item/template/macros/?reportMacro" />
</div>
<div id="questionnaire"
@ -65,6 +27,16 @@
<tal:inst condition="item/adapted/teamBasedEvaluation">
<metal:inst use-macro="item/knowledge_macros/select_institution" />
</tal:inst>
<div class="button"
tal:define="reports item/teamReports"
tal:condition="reports">
<b i18n:translate="label_survey_show_report">Show Report</b>: &nbsp;
<a tal:repeat="report reports"
tal:attributes="href string:${request/URL}?report=${report/name}"
i18n:translate=""
tal:content="report/label" />
<br /><br />
</div>
<h3 i18n:translate="">Questionnaire</h3>
<div class="error"
tal:condition="errors">
@ -153,4 +125,58 @@
</metal:block>
<metal:block define-macro="report_standard">
<h3 i18n:translate="">Feedback</h3>
<div tal:define="header item/adapted/feedbackHeader"
tal:condition="header"
tal:content="structure python:
item.renderText(header, 'text/restructured')" />
<table class="listing">
<tr>
<th i18n:translate="">Category</th>
<th tal:repeat="col item/feedbackColumns"
i18n:translate=""
tal:attributes="class python:
col['name'] != 'text' and 'center' or None"
tal:content="col/label" />
</tr>
<tr style="vertical-align: top"
tal:repeat="fbitem feedback">
<td style="vertical-align: top"
tal:content="fbitem/category" />
<tal:cols repeat="col item/feedbackColumns">
<td style="vertical-align: top"
tal:define="name col/name"
tal:attributes="class python:name != 'text' and 'center' or None"
tal:content="fbitem/?name|string:" />
</tal:cols>
</tr>
</table>
<p tal:define="teamData item/teamData"
tal:condition="teamData">
<b><span i18n:translate="">Team Size</span>:
<span tal:content="python:len(teamData)" /></b><br />&nbsp;
</p>
<div class="button" id="show_questionnaire">
<a href="" xxonclick="back(); return false"
i18n:translate=""
tal:attributes="href string:${request/URL}${item/urlParamString}">
Back to Questionnaire</a>
<br />
</div>
<div tal:define="footer item/adapted/feedbackFooter"
tal:condition="footer"
tal:content="structure python:
item.renderText(footer, 'text/restructured')" />
</metal:block>
<metal:block define-macro="report_questions">
<h3 i18n:translate="label_survey_report_questions"></h3>
<div>
Not yet implemented
</div>
</metal:block>
</html>

Binary file not shown.

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: 0.13.1\n"
"POT-Creation-Date: 2007-05-22 12:00 CET\n"
"PO-Revision-Date: 2015-04-20 12:00 CET\n"
"PO-Revision-Date: 2015-04-21 12:00 CET\n"
"Last-Translator: Helmut Merz <helmutm@cy55.de>\n"
"Language-Team: loops developers <helmutm@cy55.de>\n"
"MIME-Version: 1.0\n"
@ -285,6 +285,15 @@ msgstr "Trifft eher zu"
msgid "survey_value_3"
msgstr "Trifft für unser Unternehmen voll und ganz zu"
msgid "label_survey_show_report"
msgstr "Auswertung anzeigen"
msgid "label_survey_report_standard"
msgstr "Standard-Auswertung"
msgid "label_survey_report_questions"
msgstr "Einzelfragen-Auswertung"
msgid "Evaluate Questionnaire"
msgstr "Fragebogen auswerten"