make team reports callable independent of filling a questionnaire
This commit is contained in:
parent
57aee009b6
commit
2ea0689a05
5 changed files with 119 additions and 48 deletions
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
<metal:institution define-macro="select_institution">
|
<metal:institution define-macro="select_institution">
|
||||||
<form method="post">
|
<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>:
|
<span i18n:translate="">Organisation/Team</span>:
|
||||||
<b tal:content="item/institution/title" />
|
<b tal:content="item/institution/title" />
|
||||||
<img tal:condition="python:len(item.institutions) > 1"
|
<img tal:condition="python:len(item.institutions) > 1"
|
||||||
|
|
|
@ -35,6 +35,7 @@ from loops.common import adapted, baseObject
|
||||||
from loops.knowledge.browser import InstitutionMixin
|
from loops.knowledge.browser import InstitutionMixin
|
||||||
from loops.knowledge.survey.response import Responses
|
from loops.knowledge.survey.response import Responses
|
||||||
from loops.organize.party import getPersonForUser
|
from loops.organize.party import getPersonForUser
|
||||||
|
from loops.security.common import checkPermission
|
||||||
from loops.util import getObjectForUid
|
from loops.util import getObjectForUid
|
||||||
from loops.util import _
|
from loops.util import _
|
||||||
|
|
||||||
|
@ -72,6 +73,23 @@ class SurveyView(InstitutionMixin, ConceptView):
|
||||||
if self.editable:
|
if self.editable:
|
||||||
return 'index.html'
|
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):
|
def update(self):
|
||||||
instUid = self.request.form.get('select_institution')
|
instUid = self.request.form.get('select_institution')
|
||||||
if instUid:
|
if instUid:
|
||||||
|
@ -123,8 +141,12 @@ class SurveyView(InstitutionMixin, ConceptView):
|
||||||
cols = [
|
cols = [
|
||||||
dict(name='text', label=u'Response'),
|
dict(name='text', label=u'Response'),
|
||||||
dict(name='score', label=u'Score')]
|
dict(name='score', label=u'Score')]
|
||||||
|
if self.report == 'standard':
|
||||||
|
cols = [c for c in cols if c['name'] in self.teamColumns]
|
||||||
return cols
|
return cols
|
||||||
|
|
||||||
|
teamColumns = ['category', 'average', 'stddev', 'teamRank', 'text']
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def showTeamResults(self):
|
def showTeamResults(self):
|
||||||
for c in self.feedbackColumns:
|
for c in self.feedbackColumns:
|
||||||
|
@ -137,9 +159,6 @@ class SurveyView(InstitutionMixin, ConceptView):
|
||||||
pred = self.conceptManager.get('ismember')
|
pred = self.conceptManager.get('ismember')
|
||||||
if pred is None:
|
if pred is None:
|
||||||
return result
|
return result
|
||||||
#personId = respManager.personId
|
|
||||||
#person = self.getObjectForUid(personId)
|
|
||||||
#inst = person.getParents([pred])
|
|
||||||
inst = self.institution
|
inst = self.institution
|
||||||
instUid = self.getUidForObject(inst)
|
instUid = self.getUidForObject(inst)
|
||||||
if inst:
|
if inst:
|
||||||
|
@ -167,6 +186,8 @@ class SurveyView(InstitutionMixin, ConceptView):
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def results(self):
|
def results(self):
|
||||||
|
if self.report:
|
||||||
|
return self.teamResults(self.report)
|
||||||
form = self.request.form
|
form = self.request.form
|
||||||
action = None
|
action = None
|
||||||
for k in ('submit', 'save'):
|
for k in ('submit', 'save'):
|
||||||
|
@ -208,12 +229,27 @@ class SurveyView(InstitutionMixin, ConceptView):
|
||||||
for r in values]
|
for r in values]
|
||||||
if self.showTeamResults:
|
if self.showTeamResults:
|
||||||
self.teamData = self.getTeamData(respManager)
|
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):
|
for idx, r in enumerate(teamValues):
|
||||||
result[idx]['average'] = int(round(r['average'] * 100))
|
result[idx]['average'] = int(round(r['average'] * 100))
|
||||||
result[idx]['teamRank'] = r['rank']
|
result[idx]['teamRank'] = r['rank']
|
||||||
return result
|
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):
|
def check(self, response):
|
||||||
errors = []
|
errors = []
|
||||||
values = response.values
|
values = response.values
|
||||||
|
|
|
@ -4,6 +4,9 @@
|
||||||
|
|
||||||
<metal:block define-macro="survey"
|
<metal:block define-macro="survey"
|
||||||
tal:define="feedback item/results;
|
tal:define="feedback item/results;
|
||||||
|
report request/report|nothing;
|
||||||
|
reportMacro python:
|
||||||
|
'report_' + (report or 'standard');
|
||||||
errors item/errors;
|
errors item/errors;
|
||||||
message item/message;
|
message item/message;
|
||||||
dummy item/update">
|
dummy item/update">
|
||||||
|
@ -16,48 +19,7 @@
|
||||||
</tal:description>
|
</tal:description>
|
||||||
|
|
||||||
<div tal:condition="feedback">
|
<div tal:condition="feedback">
|
||||||
<h3 i18n:translate="">Feedback</h3>
|
<metal:block use-macro="item/template/macros/?reportMacro" />
|
||||||
<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 />
|
|
||||||
</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')" />
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="questionnaire"
|
<div id="questionnaire"
|
||||||
|
@ -65,6 +27,16 @@
|
||||||
<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>
|
||||||
|
<div class="button"
|
||||||
|
tal:define="reports item/teamReports"
|
||||||
|
tal:condition="reports">
|
||||||
|
<b i18n:translate="label_survey_show_report">Show Report</b>:
|
||||||
|
<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>
|
<h3 i18n:translate="">Questionnaire</h3>
|
||||||
<div class="error"
|
<div class="error"
|
||||||
tal:condition="errors">
|
tal:condition="errors">
|
||||||
|
@ -153,4 +125,58 @@
|
||||||
</metal:block>
|
</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 />
|
||||||
|
</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>
|
</html>
|
||||||
|
|
Binary file not shown.
|
@ -3,7 +3,7 @@ msgstr ""
|
||||||
|
|
||||||
"Project-Id-Version: 0.13.1\n"
|
"Project-Id-Version: 0.13.1\n"
|
||||||
"POT-Creation-Date: 2007-05-22 12:00 CET\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"
|
"Last-Translator: Helmut Merz <helmutm@cy55.de>\n"
|
||||||
"Language-Team: loops developers <helmutm@cy55.de>\n"
|
"Language-Team: loops developers <helmutm@cy55.de>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
@ -285,6 +285,15 @@ msgstr "Trifft eher zu"
|
||||||
msgid "survey_value_3"
|
msgid "survey_value_3"
|
||||||
msgstr "Trifft für unser Unternehmen voll und ganz zu"
|
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"
|
msgid "Evaluate Questionnaire"
|
||||||
msgstr "Fragebogen auswerten"
|
msgstr "Fragebogen auswerten"
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue