From d05b3cd5446795d75ac6c9a625e58e90874e7887 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Fri, 13 Mar 2015 15:14:29 +0100 Subject: [PATCH] CSV download improvements: button, file name, ... --- expert/browser/export.py | 7 ++++--- expert/browser/report.py | 6 ++++++ expert/browser/results.pt | 7 +++++++ knowledge/qualification/browser.py | 4 ++-- locales/de/LC_MESSAGES/loops.mo | Bin 26048 -> 25942 bytes locales/de/LC_MESSAGES/loops.po | 7 ++++++- organize/work/report.py | 4 ++-- 7 files changed, 27 insertions(+), 8 deletions(-) diff --git a/expert/browser/export.py b/expert/browser/export.py index 8c06e21..f27c105 100644 --- a/expert/browser/export.py +++ b/expert/browser/export.py @@ -24,12 +24,13 @@ import csv from cStringIO import StringIO from zope.i18n import translate -from loops.expert.browser.report import ReportConceptView +from loops.common import normalizeName +from loops.expert.browser.report import ResultsConceptView from loops.interfaces import ILoopsObject from loops.util import _ -class ReportConceptCSVExport(ReportConceptView): +class ResultsConceptCSVExport(ResultsConceptView): isToplevel = True reportMode = 'export' @@ -38,7 +39,7 @@ class ReportConceptCSVExport(ReportConceptView): encoding = 'UTF-8' def getFileName(self): - return 'output' + return normalizeName(self.context.title) def getColumnTitle(self, field): lang = self.languageInfo.language diff --git a/expert/browser/report.py b/expert/browser/report.py index acf6279..395d5f3 100644 --- a/expert/browser/report.py +++ b/expert/browser/report.py @@ -190,6 +190,12 @@ class ResultsConceptView(ConceptView): def getColumnRenderer(self, col): return self.result_macros[col.renderer] + @Lazy + def downloadLink(self, format='csv'): + opt = self.options('download_' + format) + if opt: + return opt[0] + class EmbeddedResultsConceptView(ResultsConceptView): diff --git a/expert/browser/results.pt b/expert/browser/results.pt index b9d9ed1..62a9085 100644 --- a/expert/browser/results.pt +++ b/expert/browser/results.pt @@ -37,6 +37,13 @@

+ + +
+
diff --git a/knowledge/qualification/browser.py b/knowledge/qualification/browser.py index 186642f..5c0a061 100644 --- a/knowledge/qualification/browser.py +++ b/knowledge/qualification/browser.py @@ -26,7 +26,7 @@ from zope.app.pagetemplate import ViewPageTemplateFile from zope.cachedescriptors.property import Lazy from loops.browser.concept import ConceptView -from loops.expert.browser.export import ReportConceptCSVExport +from loops.expert.browser.export import ResultsConceptCSVExport from loops.expert.browser.report import ResultsConceptView from loops.organize.party import getPersonForUser from loops.util import _ @@ -37,7 +37,7 @@ class Qualifications(ResultsConceptView): reportName = 'qualification_overview' -class QualificationsCSVExport(ReportConceptCSVExport): +class QualificationsCSVExport(ResultsConceptCSVExport): reportName = 'qualification_overview' diff --git a/locales/de/LC_MESSAGES/loops.mo b/locales/de/LC_MESSAGES/loops.mo index bcc801f4c6ad0c2e886106ca284dc2ea687fddb0..df8afd747c7f0c1ec989f7ee6b9d21c84e029d75 100644 GIT binary patch delta 9337 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 P<;$~keao*5xDfhZ#s<;L delta 9413 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 diff --git a/locales/de/LC_MESSAGES/loops.po b/locales/de/LC_MESSAGES/loops.po index 404556d..0b357ea 100644 --- a/locales/de/LC_MESSAGES/loops.po +++ b/locales/de/LC_MESSAGES/loops.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: 0.13.1\n" "POT-Creation-Date: 2007-05-22 12:00 CET\n" -"PO-Revision-Date: 2014-08-08 12:00 CET\n" +"PO-Revision-Date: 2015-03-13 12:00 CET\n" "Last-Translator: Helmut Merz \n" "Language-Team: loops developers \n" "MIME-Version: 1.0\n" @@ -89,6 +89,11 @@ msgstr "Thema ändern" msgid "Please correct the indicated errors." msgstr "Bitte berichtigen Sie die angezeigten Fehler." +# expert (reporting) + +msgid "Download Data" +msgstr "Download als Excel-Datei" + # blog msgid "Edit Blog Post..." diff --git a/organize/work/report.py b/organize/work/report.py index 0d7dd14..c3e90d1 100644 --- a/organize/work/report.py +++ b/organize/work/report.py @@ -32,7 +32,7 @@ from cybertools.organize.interfaces import IWorkItems from cybertools.util.date import timeStamp2Date, timeStamp2ISO from cybertools.util.jeep import Jeep from loops.common import adapted, baseObject -from loops.expert.browser.export import ReportConceptCSVExport +from loops.expert.browser.export import ResultsConceptCSVExport from loops.expert.browser.report import ReportConceptView from loops.expert.field import Field, TargetField, DateField, StateField, \ TextField, HtmlTextField, UrlField @@ -50,7 +50,7 @@ class WorkStatementView(ReportConceptView): reportName = 'work_statement' -class WorkStatementCSVExport(ReportConceptCSVExport): +class WorkStatementCSVExport(ResultsConceptCSVExport): reportName = 'work_statement'