fix csv and xls export (fix #1632)
This commit is contained in:
parent
3e3c45a01b
commit
822f53a3bd
|
@ -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]
|
||||
|
|
|
@ -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>'
|
||||
|
|
Loading…
Reference in New Issue