use precalculated scores per question group for team result

This commit is contained in:
Helmut Merz 2014-05-08 13:25:04 +02:00
parent f9bce78d81
commit 33687724bd

View file

@ -60,8 +60,9 @@ class SurveyView(ConceptView):
sft = self.adapted.showFeedbackText sft = self.adapted.showFeedbackText
return sft is None and True or sft return sft is None and True or sft
def getTeamData(self, respManager, myResponse): def getTeamData(self, respManager):
result = [myResponse] #result = [myResponse]
result = []
pred = self.conceptManager.get('ismember') pred = self.conceptManager.get('ismember')
if pred is None: if pred is None:
return result return result
@ -71,46 +72,53 @@ class SurveyView(ConceptView):
if inst: if inst:
for c in inst[0].getChildren([pred]): for c in inst[0].getChildren([pred]):
uid = self.getUidForObject(c) uid = self.getUidForObject(c)
if uid != personId: data = respManager.load(uid)
data = respManager.load(uid) if data:
if data: resp = Response(self.adapted, None)
resp = Response(self.adapted, None) for qu in self.adapted.questions:
for qu in self.adapted.questions: resp.values[qu] = data[qu.uid]
resp.values[qu] = data[qu.uid] qgAvailable = True
result.append(resp) for qg in self.adapted.questionGroups:
if qg.uid in data:
resp.values[qg] = data[qg.uid]
else:
qgAvailable = False
if not qgAvailable:
values = resp.getGroupedResult()
for qugroup, info, score in values:
resp.values[qugroup] = score
result.append(resp)
return result return result
def results(self): def results(self):
values = []
response = None
respManager = Responses(self.context)
form = self.request.form form = self.request.form
if 'submit' in form: if 'submit' not in form:
self.data = {} return []
response = Response(self.adapted, None) respManager = Responses(self.context)
for key, value in form.items(): data = {}
if key.startswith('question_'): response = Response(self.adapted, None)
for key, value in form.items():
if key.startswith('question_'):
if value != 'none':
uid = key[len('question_'):] uid = key[len('question_'):]
question = adapted(self.getObjectForUid(uid)) question = adapted(self.getObjectForUid(uid))
if value != 'none': value = int(value)
value = int(value) data[uid] = value
self.data[uid] = value response.values[question] = value
response.values[question] = value values = response.getGroupedResult()
respManager.save(self.data) for qugroup, info, score in values:
self.errors = self.check(response) data[self.getUidForObject(qugroup)] = score
if self.errors: respManager.save(data)
return [] self.data = data
ranks = averages = [] self.errors = self.check(response)
if response is not None: if self.errors:
if self.adapted.showTeamResults: return []
values, ranks, averages = response.getTeamResult(
self.getTeamData(respManager, response))
else:
values = response.getGroupedResult()
result = [dict(category=r[0].title, text=r[1].text, result = [dict(category=r[0].title, text=r[1].text,
score=int(round(r[2] * 100))) score=int(round(r[2] * 100)))
for r in values] for r in values]
if ranks or averages: if self.adapted.showTeamResults:
teamData = self.getTeamData(respManager)
ranks, averages = response.getTeamResult(values, teamData)
for idx, qgdata in enumerate(result): for idx, qgdata in enumerate(result):
qgdata['rank'] = ranks[idx] qgdata['rank'] = ranks[idx]
qgdata['average'] = int(round(averages[idx] * 100)) qgdata['average'] = int(round(averages[idx] * 100))