use precalculated scores per question group for team result
This commit is contained in:
parent
f9bce78d81
commit
33687724bd
1 changed files with 41 additions and 33 deletions
|
@ -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
|
||||||
|
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)
|
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 []
|
||||||
|
respManager = Responses(self.context)
|
||||||
|
data = {}
|
||||||
response = Response(self.adapted, None)
|
response = Response(self.adapted, None)
|
||||||
for key, value in form.items():
|
for key, value in form.items():
|
||||||
if key.startswith('question_'):
|
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)
|
||||||
self.data[uid] = value
|
data[uid] = value
|
||||||
response.values[question] = value
|
response.values[question] = value
|
||||||
respManager.save(self.data)
|
values = response.getGroupedResult()
|
||||||
|
for qugroup, info, score in values:
|
||||||
|
data[self.getUidForObject(qugroup)] = score
|
||||||
|
respManager.save(data)
|
||||||
|
self.data = data
|
||||||
self.errors = self.check(response)
|
self.errors = self.check(response)
|
||||||
if self.errors:
|
if self.errors:
|
||||||
return []
|
return []
|
||||||
ranks = averages = []
|
|
||||||
if response is not None:
|
|
||||||
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,
|
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))
|
||||||
|
|
Loading…
Add table
Reference in a new issue