CSV export: format duration and effort fields correctly

This commit is contained in:
Helmut Merz 2016-01-26 13:32:04 +01:00
parent 7d979a5749
commit f4a5b78700
3 changed files with 14 additions and 4 deletions

View file

@ -1,5 +1,5 @@
# #
# Copyright (c) 2015 Helmut Merz helmutm@cy55.de # Copyright (c) 2016 Helmut Merz helmutm@cy55.de
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -66,7 +66,8 @@ class ResultsConceptCSVExport(ResultsConceptView):
for row in results: for row in results:
data = {} data = {}
for f in fields: for f in fields:
value = f.getValue(row) lang = self.languageInfo.language
value = f.getExportValue(row, 'csv', lang)
if ILoopsObject.providedBy(value): if ILoopsObject.providedBy(value):
value = value.title value = value.title
value = encode(value, self.encoding) value = encode(value, self.encoding)

View file

@ -247,7 +247,7 @@ Export of work data
>>> output = reportView() >>> output = reportView()
>>> print output >>> print output
Day;Start;End;Task;Party;Title;Duration;Effort;State Day;Start;End;Task;Party;Title;Duration;Effort;State
08/12/28;19:00;20:15;loops Development;john;;1.25;0.25;finished 08/12/28;19:00;20:15;loops Development;john;;1.2500;0.2500;finished
Meeting Minutes Meeting Minutes

View file

@ -1,5 +1,5 @@
# #
# Copyright (c) 2015 Helmut Merz helmutm@cy55.de # Copyright (c) 2016 Helmut Merz helmutm@cy55.de
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -23,6 +23,7 @@ Work report definitions.
from zope.app.pagetemplate import ViewPageTemplateFile from zope.app.pagetemplate import ViewPageTemplateFile
from zope.cachedescriptors.property import Lazy from zope.cachedescriptors.property import Lazy
from zope.component import adapter, getAdapter from zope.component import adapter, getAdapter
from zope.i18n.locales import locales
from cybertools.composer.report.base import Report from cybertools.composer.report.base import Report
from cybertools.composer.report.base import LeafQueryCriteria, CompoundQueryCriteria from cybertools.composer.report.base import LeafQueryCriteria, CompoundQueryCriteria
@ -78,6 +79,14 @@ class DurationField(Field):
return u'' return u''
return u'%02i:%02i' % divmod(value * 60, 60) return u'%02i:%02i' % divmod(value * 60, 60)
def getExportValue(self, row, format, lang):
value = self.getValue(row)
if format == 'csv':
locale = locales.getLocale(lang)
fmt = locale.numbers.getFormatter('decimal')
return fmt.format(value, pattern=u'0.0000;-0.0000')
return value
class PartyStateField(StateField): class PartyStateField(StateField):