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">
|
||||
<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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 />
|
||||
</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>:
|
||||
<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 />
|
||||
</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.
|
@ -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"
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue