From 4447ea04ef28aad4d77edd509ada5a5935b552da Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Sun, 10 Jun 2012 18:04:45 +0200 Subject: [PATCH] provide generation of meeting minutes Word document --- locales/de/LC_MESSAGES/loops.mo | Bin 17737 -> 17811 bytes locales/de/LC_MESSAGES/loops.po | 3 +++ organize/work/configure.zcml | 6 ++++++ organize/work/meeting.pt | 14 ++++++++++++++ organize/work/meeting.py | 24 ++++++++++++++++++++++++ 5 files changed, 47 insertions(+) diff --git a/locales/de/LC_MESSAGES/loops.mo b/locales/de/LC_MESSAGES/loops.mo index 14888c38e0f6d21d09c267acea9c997e1a915c53..c90233031aa981a76556703f28f70f418b92d917 100644 GIT binary patch delta 6695 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 L+t8zJ@pAtI$a0Ye delta 6624 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 diff --git a/locales/de/LC_MESSAGES/loops.po b/locales/de/LC_MESSAGES/loops.po index 02ef715..76f2957 100644 --- a/locales/de/LC_MESSAGES/loops.po +++ b/locales/de/LC_MESSAGES/loops.po @@ -293,6 +293,9 @@ msgstr "Besprechungsprotokoll anzeigen..." msgid "Show meeting minutes for this object." msgstr "Besprechungsprotokoll für dieses Objekt anzeigen." +msgid "Download Meeting Minutes" +msgstr "Besprechungsprotokoll generieren" + msgid "Task/Action" msgstr "Aufgabe" diff --git a/organize/work/configure.zcml b/organize/work/configure.zcml index a0df764..4c88e42 100644 --- a/organize/work/configure.zcml +++ b/organize/work/configure.zcml @@ -103,6 +103,12 @@ class="loops.organize.work.meeting.MeetingMinutes" permission="zope.View" /> + +
+ + Download Meeting Minutes +
  +
+
+ + +
diff --git a/organize/work/meeting.py b/organize/work/meeting.py index cf4abf9..7aaa8a9 100644 --- a/organize/work/meeting.py +++ b/organize/work/meeting.py @@ -24,6 +24,7 @@ from zope.app.pagetemplate import ViewPageTemplateFile from zope.cachedescriptors.property import Lazy from cybertools.browser.action import actions +from cybertools.docgen.base import WordDocument from loops.browser.action import TargetAction from loops.expert.browser.report import ResultsConceptView from loops.util import _ @@ -41,6 +42,7 @@ actions.register('meeting_minutes', 'portlet', TargetAction, class MeetingMinutes(ResultsConceptView): reportName = 'meeting_minutes' + reportDownload = 'meeting_minutes.doc' @Lazy def meeting_macros(self): @@ -59,3 +61,25 @@ class MeetingMinutes(ResultsConceptView): if renderer == 'subreport': return self.meeting_macros[renderer] return self.result_macros[renderer] + + +class MeetingMinutesDocument(WordDocument, MeetingMinutes): + + isToplevel = True + + def __init__(self, context, request): + MeetingMinutes.__init__(self, context, request) + + @Lazy + def macros(self): + return meeting_template.macros + + @Lazy + def reportRenderer(self): + return self.macros['document'] + + @Lazy + def content(self): + return self.reportRenderer + +