fix csv and xls export (fix #1632)

This commit is contained in:
Thomas NOËL 2012-09-13 10:09:27 +02:00
parent 3e3c45a01b
commit 822f53a3bd
2 changed files with 20 additions and 25 deletions

View File

@ -244,9 +244,9 @@ class FormPage(Directory):
def get_formdata_sidebar [html] (self, qs=''):
'<ul>'
#' <li><a href="list%s">%s</a></li>' % (qs, _('List of results'))
' <li><a href="csv">%s</a></li>' % _('CSV Export')
' <li><a href="csv%s">%s</a></li>' % (qs, _('CSV Export'))
if xlwt:
'<li><a href="xls">%s</a></li>' % _('Excel Export')
'<li><a href="xls%s">%s</a></li>' % (qs, _('Excel Export'))
' <li><a href="stats">%s</a></li>' % _('Statistics')
'</ul>'
@ -258,7 +258,7 @@ class FormPage(Directory):
'<input type="hidden" name="count" value="%s"/>' % count
waitpoint_status = self.formdef.workflow.get_waitpoint_status()
if waitpoint_status:
'<h3>%s</h3>' % _('Filters')
'<h3>%s</h3>' % _('Status to display')
'<ul>'
filters = [('all', _('All')), ('pending', _('Pending')), ('done', _('Done'))]
for status in waitpoint_status:
@ -293,12 +293,8 @@ class FormPage(Directory):
fields.append(FakeField('id', 'id', _('Identifier')))
fields.append(FakeField('time', 'time', _('Time')))
fields.append(FakeField('user-label', 'user-label', _('User Label')))
fields.extend(self.formdef.fields)
if self.formdef.workflow is None or len(
self.formdef.workflow.possible_status) > 1:
fields.append(FakeField('status', 'status', _('Status')))
fields.append(FakeField('status', 'status', _('Status')))
return fields
@ -385,16 +381,12 @@ class FormPage(Directory):
'<p class="clear"><a href=".">%s</a></p>' % _('Back')
def csv_tuple_heading(self, fields):
heading_fields = ['#id', _('time'), _('userlabel'), _('status')]
heading_fields = [] # '#id', _('time'), _('userlabel'), _('status')]
for field in fields:
heading_fields.extend(field.get_csv_heading())
return heading_fields
def csv_tuple(self, fields, data):
try:
userlabel = get_publisher().user_class.get(filled.user_id).name
except:
userlabel = ''
elements = []
for field in fields:
if field.type == 'id':
@ -403,27 +395,29 @@ class FormPage(Directory):
element = misc.localstrftime(data.receipt_time)
elif field.type == 'user-label':
try:
element = User.get(data.user_id).display_name
element = get_publisher().user_class.get(data.user_id).display_name
except:
element = ''
element = '-'
pass
elif field.type == 'status':
element = data.get_status_label()
else:
element = data.data.get(field.id, '') or ''
elements.extend(['type:%s'%field.type]+field.get_csv_value(element))
elements.extend(field.get_csv_value(element))
return elements
def csv(self):
get_logger().info('backoffice - form %s - listing csv' % self.formdef.name)
fields = self.get_formdef_fields()
fields = self.get_fields_from_query()
selected_filter = self.get_filter_from_query()
output = cStringIO.StringIO()
csv_output = csv.writer(output)
csv_output.writerow(self.csv_tuple_heading(fields))
items = self.formdef.data_class().select(lambda x: x.status != 'draft')
items, total_count = FormDefUI(self.formdef).get_listing_items(selected_filter)
for filled in items:
csv_output.writerow(self.csv_tuple(fields, filled))
response = get_response()
@ -437,7 +431,8 @@ class FormPage(Directory):
get_logger().info('backoffice - form %s - as excel' % self.formdef.name)
fields = self.get_formdef_fields()
fields = self.get_fields_from_query()
selected_filter = self.get_filter_from_query()
w = xlwt.Workbook(encoding=get_publisher().site_charset)
ws = w.add_sheet('1')
@ -445,7 +440,8 @@ class FormPage(Directory):
for i, f in enumerate(self.csv_tuple_heading(fields)):
ws.write(0, i, f)
items = self.formdef.data_class().select(lambda x: x.status != 'draft')
items, total_count = FormDefUI(self.formdef).get_listing_items(selected_filter)
for i, filled in enumerate(items):
for j, elem in enumerate(self.csv_tuple(fields, filled)):
ws.write(i+1, j, elem)
@ -468,7 +464,7 @@ class FormPage(Directory):
no_forms = len(values)
'<p>%s %d</p>' % (_('Total number of records:'), no_forms)
if not self.formdef.workflow or len(self.formdef.workflow.possible_status) > 1:
if self.formdef.workflow:
'<ul>'
for status in self.formdef.workflow.possible_status:
'<li>%s: %d</li>' % (status.name,
@ -513,15 +509,14 @@ class FormPage(Directory):
'</div>'
def stats_resolution_time [html] (self, values):
possible_status_id = [x.id for x in self.formdef.workflow.possible_status]
possible_status = ['wf-%s' % x.id for x in self.formdef.workflow.possible_status]
possible_status = [('wf-%s' % x.id, x.id) for x in self.formdef.workflow.possible_status]
if len(possible_status) < 2:
return
'<h2>%s</h2>' % _('Resolution time')
for status, status_id in zip(possible_status, possible_status_id):
for status, status_id in possible_status:
res_time_forms = [
(time.mktime(x.evolution[-1].time) - time.mktime(x.receipt_time)) \
for x in values if x.status == status and x.evolution]

View File

@ -176,7 +176,7 @@ class FormDefUI:
'<td>%s</td>' % misc.localstrftime(filled.receipt_time)
elif f.type == 'user-label':
try:
value = User.get(result.user_id).display_name
value = get_publisher().user_class.get(filled.user_id).display_name
'<td>%s</td>' % value
except:
'<td>-</td>'