provide team evaluation of survey

This commit is contained in:
Helmut Merz 2014-05-02 14:45:58 +02:00
parent 2fc7709c56
commit 66bf217ee8
3 changed files with 57 additions and 16 deletions

View file

@ -60,9 +60,30 @@ class SurveyView(ConceptView):
sft = self.adapted.showFeedbackText
return sft is None and True or sft
def getTeamData(self, respManager, myResponse):
result = [myResponse]
pred = self.conceptManager.get('ismember')
if pred is None:
return result
personId = respManager.personId
person = self.getObjectForUid(personId)
inst = person.getParents([pred])
if inst:
for c in inst[0].getChildren([pred]):
uid = self.getUidForObject(c)
if uid != personId:
data = respManager.load(uid)
if data:
resp = Response(self.adapted, None)
for qu in self.adapted.questions:
resp.values[qu] = data[qu.uid]
result.append(resp)
return result
def results(self):
result = []
values = []
response = None
respManager = Responses(self.context)
form = self.request.form
if 'submit' in form:
self.data = {}
@ -75,15 +96,25 @@ class SurveyView(ConceptView):
value = int(value)
self.data[uid] = value
response.values[question] = value
Responses(self.context).save(self.data)
respManager.save(self.data)
self.errors = self.check(response)
if self.errors:
return []
ranks = averages = []
if response is not None:
result = response.getGroupedResult()
return [dict(category=r[0].title, text=r[1].text,
if self.adapted.showTeamResults:
values, ranks, averages = response.getTeamResult(
self.getTeamData(respManager, response))
else:
values = response.getGroupedResult()
result = [dict(category=r[0].title, text=r[1].text,
score=int(round(r[2] * 100)))
for r in result]
for r in values]
if ranks or averages:
for idx, qgdata in enumerate(result):
qgdata['rank'] = ranks[idx]
qgdata['average'] = int(round(averages[idx] * 100))
return result
def check(self, response):
errors = []

View file

@ -43,9 +43,11 @@ class Responses(BaseRecordManager):
self.storage.saveUserTrack(self.uid, 0, self.personId, data,
update=True, overwrite=True)
def load(self):
if self.personId:
tracks = self.storage.getUserTracks(self.uid, 0, self.personId)
def load(self, personId=None):
if personId is None:
personId = self.personId
if personId:
tracks = self.storage.getUserTracks(self.uid, 0, personId)
if tracks:
return tracks[0].data
return {}

View file

@ -19,22 +19,30 @@
<th i18n:translate="">Category</th>
<th tal:condition="item/showFeedbackText"
i18n:translate="">Response</th>
<th i18n:translate="">%</th>
<th class="center"
i18n:translate="">%</th>
<tal:team condition="item/adapted/showTeamResults">
<th i18n:translate="">Rank</th>
<th i18n:translate="">Team Score %</th>
<th i18n:translate="">Team Rank</th>
<th class="center"
i18n:translate="">Rank</th>
<th class="center"
i18n:translate="">Team Score %</th>
<th class="center"
tal:condition="nothing"
i18n:translate="">Team Rank</th>
</tal:team>
</tr>
<tr tal:repeat="fbitem feedback">
<td tal:content="fbitem/category" />
<td tal:condition="item/showFeedbackText"
tal:content="fbitem/text" />
<td tal:content="fbitem/score" />
<td class="center"
tal:content="fbitem/score" />
<tal:team condition="item/adapted/showTeamResults">
<td />
<td />
<td />
<td class="center"
tal:content="fbitem/rank" />
<td class="center"
tal:content="fbitem/average" />
<td tal:condition="nothing" />
</tal:team>
</tr>
</table>