survey CSV export: fix encoding, add institution column
This commit is contained in:
parent
17af65c461
commit
2f74920692
2 changed files with 12 additions and 7 deletions
|
@ -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)
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Add table
Reference in a new issue