survey CSV export: fix encoding, add institution column

This commit is contained in:
Helmut Merz 2014-06-17 17:14:17 +02:00
parent 17af65c461
commit 2f74920692
2 changed files with 12 additions and 7 deletions

View file

@ -31,7 +31,7 @@ from cybertools.knowledge.survey.questionnaire import Response
from cybertools.util.date import formatTimeStamp from cybertools.util.date import formatTimeStamp
from loops.browser.concept import ConceptView from loops.browser.concept import ConceptView
from loops.browser.node import NodeView from loops.browser.node import NodeView
from loops.common import adapted from loops.common import adapted, baseObject
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.util import getObjectForUid from loops.util import getObjectForUid
@ -248,7 +248,7 @@ class SurveyCsvExport(NodeView):
encoding = 'ISO8859-15' encoding = 'ISO8859-15'
def encode(self, text): def encode(self, text):
text.encode(self.encoding) return text.encode(self.encoding)
@Lazy @Lazy
def questions(self): def questions(self):
@ -261,24 +261,30 @@ class SurveyCsvExport(NodeView):
@Lazy @Lazy
def columns(self): def columns(self):
infoCols = ['Name', 'Timestamp'] infoCols = ['Institution', 'Name', 'Timestamp']
dataCols = ['%02i-%02i' % (item[0], item[1]) for item in self.questions] dataCols = ['%02i-%02i' % (item[0], item[1]) for item in self.questions]
return infoCols + dataCols return infoCols + dataCols
def getRows(self): def getRows(self):
memberPred = self.conceptManager.get('ismember')
for tr in Responses(self.virtualTargetObject).getAllTracks(): for tr in Responses(self.virtualTargetObject).getAllTracks():
p = adapted(getObjectForUid(tr.userName)) p = adapted(getObjectForUid(tr.userName))
name = p and p.title or u'???' name = self.encode(p and p.title or u'???')
inst = u''
if memberPred is not None:
for i in baseObject(p).getParents([memberPred]):
inst = self.encode(i.title)
break
ts = formatTimeStamp(tr.timeStamp) ts = formatTimeStamp(tr.timeStamp)
cells = [tr.data.get(qu.uid, -1) cells = [tr.data.get(qu.uid, -1)
for (idx1, idx2, qug, qu) in self.questions] for (idx1, idx2, qug, qu) in self.questions]
yield [name, ts] + cells yield [inst, name, ts] + cells
def __call__(self): def __call__(self):
f = StringIO() f = StringIO()
writer = csv.writer(f, delimiter=',') writer = csv.writer(f, delimiter=',')
writer.writerow(self.columns) writer.writerow(self.columns)
for row in self.getRows(): for row in sorted(self.getRows()):
writer.writerow(row) writer.writerow(row)
text = f.getvalue() text = f.getvalue()
self.setDownloadHeader(text) self.setDownloadHeader(text)

View file

@ -115,7 +115,6 @@ class EditForm(BaseTrackView):
if not form.get('form_submitted'): if not form.get('form_submitted'):
return True return True
data = {} data = {}
print '*** update', form
for row in form.get('data') or []: for row in form.get('data') or []:
key = row['key'] key = row['key']
if not key: if not key: